【发布时间】:2014-04-24 13:23:43
【问题描述】:
所以我使用boost::lockfree::spec_queue 通过两个 boost_threads 进行通信,该线程在我的应用程序中运行两个对象的函子。
除了spec_queue::pop() 方法是非阻塞的,一切都很好。即使队列中没有任何内容,它也会返回 True 或 False。但是,我的队列似乎总是返回 True(问题 #1)。我认为这是因为我预先分配了队列。
typedef boost::lockfree::spsc_queue<q_pl, boost::lockfree::capacity<100000> > spsc_queue;
这意味着要有效地使用队列,我必须忙于等待使用 100% cpu 不断弹出队列。我宁愿不要睡任意时间。我在java中使用了其他队列,这些队列会阻塞直到对象可用。这可以用 std:: 或 boost:: 数据结构来完成吗?
【问题讨论】:
-
你能指出 Java 中的哪些并发队列有阻塞弹出吗?很有可能(a)它不是无锁的(b)它有可以精确指定你可怕的“任意时间量”的可调参数
-
是的 - 只需使用 BlockingQueue 类。你想要你的蛋糕也吃吗?
标签: c++ multithreading boost boost-thread lock-free