我尝试了类似this问题中描述的内容:
// create copy
auto new_data(std::make_shared<some_class>(*this->data));
... // modify *new_data
// apply new data
std::atomic_store(&this->data, new_data);
..后来我意识到在安装了gcc 4.8的其他机器上它不起作用(如同一个问题所述)。
是否有一种解决方法 - 像(暂时)派生自std::shared_ptr
提供所需的接口或仅使用其他原子操作?
或者当我在全局指针中存储新对象时, 提供外部互斥锁以保护读取权限?
答案 0 :(得分:1)
如果Boost是一个选项,一个选项当然只是使用boost::shared_ptr
和boost::atomic_store
而不是STL。它具有相同的界面,因此很容易更换。