std::atomic 负载中的段错误?
Segfault in std::atomic load?
在 linux 上,使用 gcc 4.8.4,使用 -std=c++11 -mcx16:
编译
#include <atomic>
struct node_t;
struct pointer_t {
node_t* ptr;
unsigned int count;
pointer_t() noexcept : ptr{nullptr}, count{0} {}
};
struct empty {};
struct node_t {
empty value;
std::atomic<pointer_t> next;
node_t() : next{pointer_t{}} {}
};
int main() {
node_t{}.next.load();
return 0;
}
在调用 load
时给出段错误。我要如何初始化一个原子值?
原来这是 gcc 中的一个 bug,此后已在 GCC 5.1 中得到修复。指定对齐方式为两个单词修复它。
在 linux 上,使用 gcc 4.8.4,使用 -std=c++11 -mcx16:
编译#include <atomic>
struct node_t;
struct pointer_t {
node_t* ptr;
unsigned int count;
pointer_t() noexcept : ptr{nullptr}, count{0} {}
};
struct empty {};
struct node_t {
empty value;
std::atomic<pointer_t> next;
node_t() : next{pointer_t{}} {}
};
int main() {
node_t{}.next.load();
return 0;
}
在调用 load
时给出段错误。我要如何初始化一个原子值?
原来这是 gcc 中的一个 bug,此后已在 GCC 5.1 中得到修复。指定对齐方式为两个单词修复它。