我有2个线程和全局队列,一个线程(t1)推送数据,另一个线程(t2)弹出数据,我想在不使用函数的情况下同步此操作,我们可以使用Windows API在关键部分使用该队列。

队列是全局的,我想知道如何同步,是通过锁定队列的地址来完成的吗?

答案将不胜感激。 :)

是否可以将Boost Library用于上述问题?

谢谢

最佳答案

一种方法是使用两个队列而不是一个:

  • 生产者线程将项目推送到队列A。
  • 当使用者线程要弹出项目时,将队列A与空队列B交换。
  • 生产者线程继续将项目推送到新队列A。
  • 消费者不间断地消费队列B中的项目并将其清空。
  • 队列A与队列B等交换。

  • 唯一的锁定/阻塞/同步是在交换队列时发生的,这应该是一种快速的操作,因为这实际上是交换两个指针的问题。

    10-07 16:59
    查看更多