对共享指针的原子操作,C ++版本

时间:2019-05-13 23:07:49

标签: c++ shared-ptr stdatomic

我正在使用此线程swap c++ map objects in multithreaded environment

但是,

#include <memory>
#include <thread>
#include <chrono>
#include <atomic>
#include <iostream>
using namespace std;

shared_ptr<std::string> the_string;

int main()
{
     atomic_store(&the_string, std::make_shared<std::string>("first string"));
}     

给出编译时错误

error: no matching function for call to 'atomic_store'
     atomic_store(&the_string, std::make_shared<std::string>("first string"));
     ^~~~~~~~~~~~
/Library/Developer/CommandLineTools/usr/include/c++/v1/atomic:1165:1: note: candidate template ignored: could not match 'atomic' against 'shared_ptr'
atomic_store(volatile atomic<_Tp>* __o, _Tp __d) _NOEXCEPT

我确实看到了一些有关此问题的线索,并且了解到它可能与我在另一个框中具有/usr/include/c++/4.2.1//usr/include/c++/4.8.5/的C ++版本有关,两者都给出了相同的问题。我应该升级C ++版本吗?

我通过传递-std = c ++ 11标志解决了这个问题。

2 个答案:

答案 0 :(得分:1)

我通过传递-std = c ++ 11

标志来解决此问题

答案 1 :(得分:0)

它可以在GCC 8.3和Clang 8.0上很好地编译,所以是的,您应该升级编译器。