原子共享指针列表
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
我需要一个线程安全的共享指针列表,我看到在 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