我有游戏,我有两个线程,一个生成自定义类,需要存储(我把它推到队列中但我不确定这是否是线程安全的,第一个线程生成每50ms新实例,第二个如果有任何或更慢的速度变化,可以更快地读取速度。另一个线程使用if queue不为空,先弹出并计算一些东西。在stl或boost中是否有任何数据结构线程可以安全地解决这个问题?
答案 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的概念。我无法提供此类实施的示例,但我相信如果你谷歌可以找到一些。