原子共享指针列表

List of atomic shared pointers

我需要一个线程安全的共享指针列表,我看到在 c++20 中他们为原子共享 _ptr 添加了模板特化。 (std::atomic<std::shared_ptr<Delegate>>).

因此我想知道我是否需要实现自己的双向链表,或者这就是我需要的 std::list<std::atomic<std::shared_ptr<Delegate>>> 我的线程安全列表?

一个std::list<std::atomic<std::shared_ptr<Delegate>>>是一个原子指针列表。这意味着指针有一些线程安全保证。

它不是原子链表,链表结构与没有std::atomic的相同结构相比也没有任何额外的线程安全性。

因此,例如,如果您有两个线程保存对列表中元素的引用,则其中一个修改指针而另一个读取它是安全的(reader 将看到旧值或新值)。

但是,如果您在一个线程中修改列表(推送、弹出、清除等),同时在另一个线程中读取或修改它,则这是未定义的行为。为此,您可能希望使用不同的线程安全容器,或者使用 std::mutex.

保护 std::list