我有一个boost::shared_ptr<Map>
,这个地图正被多个线程修改,我是否需要使用显式互斥,或者只是线程通过共享指针修改地图的事实,我会得到某种隐含的线程安全?
答案 0 :(得分:2)
Did you even look at the docs?
shared_ptr对象提供与内置相同级别的线程安全性 类型。 shared_ptr实例可以“读取”(仅使用const访问) 操作)由多个线程同时进行。不同的shared_ptr 实例可以“写入”(使用可变操作访问) 多个线程同时执行operator =或reset)(即使是 这些实例是副本,并共享相同的引用计数 的下面。)
任何其他同步访问都会导致未定义的行为。
编辑:看起来你问的是指向的对象,而不是指针本身。在这种情况下,根本没有线程安全gaurentees。为什么会这样?
答案 1 :(得分:1)
shared_ptr
具有与内置类型相同的线程安全级别。
您可以同时从多个线程执行read(const)操作。
您还可以同时从多个线程对不同的operator=
实例执行写操作(即使用reset
或shared_ptr
等可变操作)。这包括这些实例共享相同引用计数的情况(因为shared_ptr
为ref计数器提供原子递增/递减)。
如果您需要任何其他类型的访问权限,则需要同步它,否则您将获得未定义的行为。