小编Mad*_*tch的帖子

阻塞和非阻塞队列

我需要建立与队列(生产者任务推到队列中,消费者执行它们,因为他们来)连接两个线程生产者 - 消费者方案.

由于队列在大多数情况下都是空的,所以我必须做到这一点,以便消费者线程可以睡觉,并在生产者推动某些东西后立即被唤醒.但是,我必须确保生产者永远不会被阻止,甚至不会很快.换句话说,我需要一些单侧阻塞队列.

有无锁队列,但由于这些是定义的,好吧,无锁,因此消费者线程不可能被它们阻止.

我曾想过将无锁队列与条件变量相关联.当消费者线程发现队列为空时,它将睡眠等待通知条件.生产者线程在将任务推入唤醒消费者线程的队列(如果它正在休眠)时会通知条件.但是,条件变量必须受互斥锁保护,这意味着在尝试获取生成器线程以通知条件时,生产者线程仍有很小的机会被阻止.

我还没有找到解决这个问题的好方法,所以你的想法更受欢迎.

注意:我打算使用boost线程来实现它.

注2:我不考虑生产者试图推送东西并且队列已满的情况.这永远不会发生.

c++ multithreading boost-thread

5
推荐指数
1
解决办法
750
查看次数

标签 统计

boost-thread ×1

c++ ×1

multithreading ×1