首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >阻塞队列和非阻塞队列

阻塞队列和非阻塞队列
EN

Stack Overflow用户
提问于 2014-08-22 22:28:36
回答 1查看 1.1K关注 1票数 6

我需要设置一个生产者-消费者方案,其中两个线程由一个队列链接(生产者将任务推入队列,消费者在任务出现时执行任务)。

由于队列大部分时间都是空的,所以我必须做好它,这样使用者线程就可以在出厂者一推出什么东西时就睡觉并被唤醒。然而,我必须确保制片人永远不会被封杀,即使是在短期内。换句话说,我需要一些单边阻塞队列。

这里有无锁队列,但是根据定义,这些队列是免费的,因此它们不可能阻止使用者线程。

我已经考虑过将一个无锁队列与一个条件变量关联起来。当使用者线程发现队列为空时,它将处于休眠状态,等待通知条件。当将任务推入队列时,生产者线程会通知条件,唤醒使用者线程(如果它正在休眠)。但是,条件变量必须由互斥保护,这意味着在试图获取生成器线程通知条件时,仍然有很小的机会阻止它。

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

注意:我计划使用boost线程来实现这一点。

注2:我不考虑生产者试图推送某个东西而队列已满的情况。这是永远不会发生的。

EN

回答 1

Stack Overflow用户

发布于 2014-08-23 07:00:50

tbb提供 --阻塞队列和非阻塞队列:

  • queue<>为无限制的增长提供了非阻塞的try_pop()push()
  • queue<>提供了push(),如果指定了容量限制并在达到此限制时可以阻塞;而pop()则提供在空队列中等待项。它还为同一队列提供了非阻塞的try_push()try_pop()替代方案。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25456427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档