stl或boost中是否存在用于线程间通信的线程安全结构,其行为类似于队列
Is there in stl or boost thread safe structure for inter thread communication - with behavior like queue?
我有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。我不能提供这样一个实现的例子,但我相信如果你四处搜索,你可以找到一些。
相关文章:
- 标准 cpp 数据结构和线程互斥锁?
- 在std::线程中使用已分配的结构数据
- 多线程和共享资源:使用C++定期将数据从缓冲区(数据结构)复制到文件
- 当并行线程访问同一数据结构的其他成员时,正确的方法可以在Visual Studio上的OpenMP上并行循环
- 无法找出此错误(将结构数组传递给函数):线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x1)
- 在多线程程序中创建OpenGL结构
- 从线程执行的函数中返回结构数组
- 如何将结构元素传递给异步线程
- 现代C++.从继续执行的工作线程返回数据结构
- OpenMP中树结构的线程安全性
- 当结构数组在主线程中填充数据时,从结构数组的低索引元素读取是否线程安全
- POSIX线程,将多个参数传递给具有结构的函数
- 使用 MFC 的结构多线程
- 从类对象和结构对象 c++ 开始线程
- 线程和结构C++
- OOP结构,可能还有一些关于线程的东西
- 工作线程队列的这种变体是某种模式或通用结构吗?
- 使用 Qt 的简单线程 gui 应用程序的结构是什么?
- 为什么valgrind(helgrind)在我的线程结构上调用虚函数时生成"Possible Data Races"
- 线程结构的性能成本:错过优化和内存分配