我需要一个可以同时读/写的消息双端队列。只写就够了吗
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/