Я хотел бы передать некоторую информацию между потоками. Атомика звучит как то, что нужно использовать. Я посмотрел на это . И обнаружил, что простая структура типа
struct MyType{
int val_a,val_b;
float vals_c[5];
};
должна полностью заполнить утверждение:
static_assert(
std::is_trivially_copyable<MyType>::value &&
std::is_copy_constructible<MyType>::value &&
std::is_move_constructible<MyType>::value &&
std::is_copy_assignable<MyType>::value &&
std::is_move_assignable<MyType>::value,
"MyType is not suitable for std::atomic");
)
Но простая программа, такая как
//... MyType and static_assert
int main(int argc,char *argv[]){
MyType a;
std::atomic<MyType> b;
b = a;
a = b;
return 0;
}
не компилируется с:
undefined reference to `__atomic_store'
undefined reference to `__atomic_load'
Я использую g cc версии 5.4 на 64-битной Ubuntu 16.04.
Используются флаги: -pipe -g -std=gnu++11 -Wall -W -fPIC
Это полное неправильное использование std::atomic
? Каковы требования к MyType? Или в этой настройке чего-то не хватает?