【发布时间】:2014-01-11 23:36:59
【问题描述】:
我看到了以下详细说明生产者消费者无锁队列的帖子:
C++ Lock free producer/consumer queue
它使用自定义编写的链表。编写一个链表的目的是什么,当一个人可以只使用std::queue 并在数据结构周围编写一些访问器包装器时?
【问题讨论】:
-
您不能从非无锁数据结构创建无锁数据结构。您可以轻松地使其并发,但不能没有锁。
-
无锁编程非常微妙,没有“快速而明显的方法”来做到这一点。不过,如果您真的感兴趣,我建议您花一到六周的时间研究该主题;这将是美好的时光。
-
@Casey 您能否详细说明为什么不呢?我想您是在直接回答为什么必须编写自己的数据结构而不是使用 std::queue?
-
多个线程同时修改
std::queue是不安全的。您建议的“访问器包装器”必须确保一次只有一个线程可以调用包含的std::queue的成员函数。您将有效地实现一种机制,该机制要求其他线程等待当前访问共享数据结构的线程完成,即锁。
标签: c++ multithreading c++11 queue producer-consumer