我有游戏,我有两个线程,一个生成自定义类并需要存储它(我将其推送到队列中,但我不确定这是否是线程安全的,第一个线程每 50 毫秒生成一个新实例,第二个可以更快地读取如果有任何或更慢 - 速度随时间变化)。如果队列不为空,则另一个线程使用,首先弹出并计算一些东西。在 stl 或 boost 中是否有针对此问题的任何数据结构线程安全?
问问题
2017 次
1 回答
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以获取最新版本的 boost .
此外,还有无锁队列的概念en.wikipedia.org/wiki/Non-blocking_algorithm。我无法提供这种实现的示例,但我相信如果你用谷歌搜索,你可以找到一些。
于 2012-07-27T07:41:45.560 回答