我需要建立与队列(生产者任务推到队列中,消费者执行它们,因为他们来)连接两个线程生产者 - 消费者方案.
由于队列在大多数情况下都是空的,所以我必须做到这一点,以便消费者线程可以睡觉,并在生产者推动某些东西后立即被唤醒.但是,我必须确保生产者永远不会被阻止,甚至不会很快.换句话说,我需要一些单侧阻塞队列.
有无锁队列,但由于这些是定义的,好吧,无锁,因此消费者线程不可能被它们阻止.
我曾想过将无锁队列与条件变量相关联.当消费者线程发现队列为空时,它将睡眠等待通知条件.生产者线程在将任务推入唤醒消费者线程的队列(如果它正在休眠)时会通知条件.但是,条件变量必须受互斥锁保护,这意味着在尝试获取生成器线程以通知条件时,生产者线程仍有很小的机会被阻止.
我还没有找到解决这个问题的好方法,所以你的想法更受欢迎.
注意:我打算使用boost线程来实现它.
注2:我不考虑生产者试图推送东西并且队列已满的情况.这永远不会发生.