如何实现std :: atomic ref计数器?

时间:2018-12-01 13:20:08

标签: c++

假设我有一个std::atomic<int>变量refCount。我希望具有以下行为:

if (refCount > 0) {
    ++refCount;
    // acquire the shared ownership
}

当然,这在多线程条件下不起作用。我没有运气就尝试过fetch_subcompare_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;
}

0 个答案:

没有答案