multithreading - 使用 std::atomic 在 C++11 中编写线程安全的双端队列

标签 multithreading c++11 stdatomic

我需要一个可以同时读/写的消息双端队列。只写就够了吗

std::atomic<std::deque<Message>> queue;

这与具有 std::deque<Message> queue_ 的包装类是否相同?和一个 std::mutex mutex_作为数据成员,并锁定 mutex_在将任何操作转发给 queue_ 之前?

最佳答案

绝对不是。

这非常不安全。总而言之,创建安全的高性能并发数据结构复杂得令人难以置信,距离“每次访问只需锁定一个互斥量”一百万英里。您可能需要数年或数十年的时间来创建自己的。 API 设计与标准容器完全不同,仅供初学者使用。

您需要从可靠的来源获取这些结构,例如英特尔 (TBB) 或微软 (PPL)。 Boost.Lockfree 也有一些。

关于multithreading - 使用 std::atomic 在 C++11 中编写线程安全的双端队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21418009/

相关文章:

c - Linux 中的 Posix 线程信号量

c++,std::atomic,什么是 std::memory_order 以及如何使用它们?

c++ - std::atomic 中的自定义类型

c++ - std::atomic 中的任何内容都是免等待的?

c# - NetworkStream.Read() 和 NetworkStream.BeginRead() 之间的区别?

java - 多核系统中最终收集线程安全吗?

c++ - c++ (c++0x) 如何处理隐式类型变量?

c++ - 一个唯一的 ptr 类应该如何将它的实例指针传递给它的成员对象

java - 尝试使用 JNI : libjvm. 在 C++ 代码中使用 jar 时出错,因此未找到

java - 如何在 Java 中以安全的方式停止和恢复线程?