是否存在用于线程间通信的stl或boost线程安全结构 - 具有队列之类的行为?

时间:2012-07-27 07:22:06

标签: c++ multithreading boost stl

我有游戏,我有两个线程,一个生成自定义类,需要存储(我把它推到队列中但我不确定这是否是线程安全的,第一个线程生成每50ms新实例,第二个如果有任何或更慢的速度变化,可以更快地读取速度。另一个线程使用if queue不为空,先弹出并计算一些东西。在stl或boost中是否有任何数据结构线程可以安全地解决这个问题?

1 个答案:

答案 0 :(得分:3)

使用std::queue或任何类似的容器将不是线程安全的。如果您希望您的访问(推/弹)是线程安全的,在使用std :: queue时,您应该使用boost::mutex或类似的机制在每次访问之前锁定。如果您需要来自多个线程的不可变读取,则可以查看boost::shared_mutex(不确定是否需要基于您所描述的内容)。

除此之外,你可以看一下boost::interprocess::message_queue,正如有人提到的那样 - > http://www.boost.org/doc/libs/1_50_0/boost/interprocess/ipc/message_queue.hpp获取最新版本的提升。

此外,还有无锁队列en.wikipedia.org/wiki/Non-blocking_algorithm的概念。我无法提供此类实施的示例,但我相信如果你谷歌可以找到一些。