假设我有一个std::atomic<int>
变量refCount
。我希望具有以下行为:
if (refCount > 0) {
++refCount;
// acquire the shared ownership
}
当然,这在多线程条件下不起作用。我没有运气就尝试过fetch_sub
和compare_exchange_strong
。但是不知何故std :: shared_ptr成功做到了。我不知道他们是怎么做到的。
编辑:
更具体地说,线程下面的代码安全吗?如果是的话,如何使用上述refCount
实现相同的线程安全性。
#include<thread>
#include<memory>
using namespace std;
shared_ptr<int> sharedInt = make_shared<int>(1);
int main() {
thread([]() {
sharedInt = nullptr;
}).detach();
shared_ptr<int> cp = sharedInt;
}