我尝试了几种方法来同步以下情况。我尝试的最后一种方法是使用事件在FifoQueueData();之后发出信号。然后,线程2将从事件中释放出来,并通过网络发送数据。问题在于,线程1的循环速度过快,并在线程2等待相同事件之前通知了该事件。这将导致事件等待直到超时。

thread1 {
  for(1 .. 10) {
    GenerateData();
    FifoQueueData();
  }
  signal();
}

thread2 {
  while(not signalled) {
    WaitForQueuedData();
    FifoDequeueData();
    SendDataOverNetwork();
  }
}

最佳答案

因为您在Windows上,所以确实可以使用线程消息队列进行同步(此特定队列是线程安全的,也许消息队列就是Olaf的“通常”的含义)。为此,请使用GetMessagePostThreadMessage

但是请注意,可以从其他代码访问消息队列-为了确保类型安全,您可以将对象放在自己的队列中,并且仅将线程消息队列用于唤醒另一个线程。 (要了解为什么这很重要,请阅读“窗口粉碎攻击”)。在这种情况下,您最好只使用自动重置事件。

关于c - 如何同步以下情况?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32281480/

10-11 22:48
查看更多