我有一个boost::shared_ptr<Map>
,并且这个映射正在被多个线程修改,我需要使用显式互斥锁还是线程通过共享指针修改映射的事实,我会获得某种隐式线程安全?
问问题
172 次
2 回答
2
shared_ptr 对象提供与内置类型相同级别的线程安全。多个线程可以同时“读取”(仅使用 const 操作访问)shared_ptr 实例。不同的 shared_ptr 实例可以被多个线程同时“写入”(使用诸如 operator= 或 reset 之类的可变操作访问)(即使这些实例是副本,并且在下面共享相同的引用计数。)
任何其他同时访问都会导致未定义的行为。
编辑:看起来您是在询问指向的对象,而不是指针本身。在这种情况下,根本没有线程安全指标。为什么会有?
于 2012-08-23T23:56:30.660 回答
1
shared_ptr
与内置类型具有相同级别的线程安全性。
您可以同时从多个线程执行读取 (const) 操作。
您还可以从多个线程同时对不同实例执行写操作(即使用可变操作,例如operator=
or )。这包括这些实例共享相同引用计数的情况(因为为引用计数器提供原子增量/减量)。reset
shared_ptr
shared_ptr
如果您需要任何其他类型的访问,则需要对其进行同步,否则您将获得未定义的行为。
于 2012-08-23T23:56:48.023 回答