【发布时间】:2012-07-25 20:36:40
【问题描述】:
我有游戏,我有两个线程,一个生成自定义类并需要存储它(我将其推送到队列中但我不确定这是否是线程安全的,第一个线程每 50 毫秒生成一个新实例,第二个如果有任何或较慢的速度可以更快地阅读 - 速度随时间变化)。如果队列不为空,则另一个线程使用,首先弹出并计算一些东西。 stl 或 boost 中是否有针对此问题的任何数据结构线程安全?
【问题讨论】:
标签: c++ multithreading boost stl
我有游戏,我有两个线程,一个生成自定义类并需要存储它(我将其推送到队列中但我不确定这是否是线程安全的,第一个线程每 50 毫秒生成一个新实例,第二个如果有任何或较慢的速度可以更快地阅读 - 速度随时间变化)。如果队列不为空,则另一个线程使用,首先弹出并计算一些东西。 stl 或 boost 中是否有针对此问题的任何数据结构线程安全?
【问题讨论】:
标签: c++ multithreading boost stl
使用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的概念。我无法提供此类实现的示例,但我相信您可以通过 Google 搜索找到一些示例。
【讨论】: