0

我有一个boost::shared_ptr<Map>,并且这个映射正在被多个线程修改,我需要使用显式互斥锁还是线程通过共享指针修改映射的事实,我会获得某种隐式线程安全?

4

2 回答 2

2

你甚至看过文档吗?

shared_ptr 对象提供与内置类型相同级别的线程安全。多个线程可以同时“读取”(仅使用 const 操作访问)shared_ptr 实例。不同的 shared_ptr 实例可以被多个线程同时“写入”(使用诸如 operator= 或 reset 之类的可变操作访问)(即使这些实例是副本,并且在下面共享相同的引用计数。)

任何其他同时访问都会导致未定义的行为。

编辑:看起来您是在询问指向的对象,而不是指针本身。在这种情况下,根本没有线程安全指标。为什么会有?

于 2012-08-23T23:56:30.660 回答
1

shared_ptr与内置类型具有相同级别的线程安全性。

您可以同时从多个线程执行读取 (const) 操作。

您还可以从多个线程同时对不同实例执行写操作(即使用可变操作,例如operator=or )。这包括这些实例共享相同引用计数的情况(因为为引用计数器提供原子增量/减量)。resetshared_ptrshared_ptr

如果您需要任何其他类型的访问,则需要对其进行同步,否则您将获得未定义的行为。

于 2012-08-23T23:56:48.023 回答