stl或boost中是否存在用于线程间通信的线程安全结构,其行为类似于队列

Is there in stl or boost thread safe structure for inter thread communication - with behavior like queue?

本文关键字:线程 结构 安全 队列 类似于 通信 boost 是否 存在 用于 stl      更新时间:2023-10-16

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

使用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。我不能提供这样一个实现的例子,但我相信如果你四处搜索,你可以找到一些。