我正在多线程处理大量代码(gcc 7.4,c ++ 17),并且在访问std::shared_ptr
时偶然发现了许多竞争条件。
我尝试使用boost::atomic_shared_ptr
,但是代码的某些关键部分从函数返回了共享指针,或者在其他类的构造函数中使用了共享指针,boost::atomic_shared_ptr
不支持(复制构造函数和赋值运算符是私有的)。
我还有其他3条建议:
-将所有使用互斥量访问共享指针的地方包裹起来,但这对我来说似乎太过分了。
-创建我的atomic_shared_pointer实现。
-使用std::atomic_store
/ std::atomic_load
。
示例:
auto result = someFunc(*obj);
result
和someFunc
在此示例中无关紧要,obj
是std::shared_ptr
至Object
。这条线导致竞争状况。
我知道用互斥体包装所有内容都是有效的解决方案,但这是很多代码,我正在寻找更优雅的解决方案。