2

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

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

这对于具有 astd::deque<Message> queue_和 astd::mutex mutex_作为数据成员并mutex_在将任何操作转发到之前锁定的包装类是否相同queue_

4

1 回答 1

6

绝对不。

这是非常不安全的。总而言之,创建安全的高性能并发数据结构非常复杂,距离“每次访问都锁定一个互斥体”还有一百万英里。你需要数年或数十年才能创建自己的。API 设计与标准容器完全不同,仅适用于初学者。

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

于 2014-01-28T22:20:16.457 回答