我需要一个可以同时读/写的消息deque。仅写
就足够了std::atomic<std::deque<Message>> queue;
对于具有std::deque<Message> queue_
和std::mutex mutex_
作为数据成员的包装类是否相同,并且在将任何操作转发到mutex_
之前锁定queue_
?
答案 0 :(得分:6)
绝对不是。
这是非常不安全的。长期和短期是创建安全的高性能并发数据结构是令人难以置信的复杂,距离“Just lock a mutex every access”一百万英里。创建自己的产品需要数年或数十年的时间。 API设计与标准容器完全不同,仅适用于初学者。
您需要从可靠的来源(如英特尔(TBB)或微软(PPL))获取这些结构。 Boost.Lockfree也有一些。