包含指针的原子结构
Atomic struct containing pointer
#include <atomic>
#include <iostream>
using namespace std;
struct Simple{
int a = 0;
int b = 0;
};
struct WithPointer{
int *a = nullptr;
int b = 0;
};
int main(int argc, char const *argv[])
{
atomic<Simple> simple;
cout<<simple.is_lock_free()<<"\n";
atomic<Simple*> simple_p;
cout<<simple_p.is_lock_free()<<"\n";
atomic<WithPointer> with_pointer;
cout<<with_pointer.is_lock_free()<<"\n";
return 0;
}
此示例适用于 Simple 结构,但不适用于 WithPointer 结构。
我收到以下编译错误,为什么?
我能做什么。
g++ main.cpp
/usr/bin/ld: /tmp/cc49YEoR.o: in function `std::atomic<WithPointer>::is_lock_free() const':
1a.cpp:(.text._ZNKSt6atomicI11WithPointerE12is_lock_freeEv[_ZNKSt6atomicI11WithPointerE12is_lock_freeEv]+0x1d): undefined reference to `__atomic_is_lock_free'
collect2: error: ld returned 1 exit status
您需要在 clang 和 gcc 上使用 -latomic
标志编译程序。 demo.
#include <atomic>
#include <iostream>
using namespace std;
struct Simple{
int a = 0;
int b = 0;
};
struct WithPointer{
int *a = nullptr;
int b = 0;
};
int main(int argc, char const *argv[])
{
atomic<Simple> simple;
cout<<simple.is_lock_free()<<"\n";
atomic<Simple*> simple_p;
cout<<simple_p.is_lock_free()<<"\n";
atomic<WithPointer> with_pointer;
cout<<with_pointer.is_lock_free()<<"\n";
return 0;
}
此示例适用于 Simple 结构,但不适用于 WithPointer 结构。 我收到以下编译错误,为什么? 我能做什么。
g++ main.cpp
/usr/bin/ld: /tmp/cc49YEoR.o: in function `std::atomic<WithPointer>::is_lock_free() const':
1a.cpp:(.text._ZNKSt6atomicI11WithPointerE12is_lock_freeEv[_ZNKSt6atomicI11WithPointerE12is_lock_freeEv]+0x1d): undefined reference to `__atomic_is_lock_free'
collect2: error: ld returned 1 exit status
您需要在 clang 和 gcc 上使用 -latomic
标志编译程序。 demo.