【发布时间】:2020-09-07 20:30:41
【问题描述】:
据我们所知: 加载 memory_order_acquire, 使用 memory_order_release 存储 然而, 我发现使用 gcc4.8.2,打开 -O2,抛出编译错误, /usr/include/c++/4.8.2/atomic:199:9: 错误:'__atomic_store' 的内存模型无效 但是如果关闭-O2,错误就消失了
此外,如果使用 gcc8.3.0,即使使用 -O2 也会引发错误
那么发生了什么?这要怎么解释?
【问题讨论】:
-
你能给出一个失败的代码的具体例子吗? “open -O2”是指有这个选项,还是没有这个选项? “打开/关闭”不是命令行选项的标准术语。
-
来自std::atomic<T>::store - 订单必须是
memory_order_relaxed、memory_order_release或memory_order_seq_cst之一。否则行为未定义。 如果寻找具体的 lib 实现(我寻找 msvc 而不是 gcc) -_Check_store_memory_order和 store - 可见_INVALID_MEMORY_ORDER案例已执行。扩展为空或_STL_REPORT_ERROR("Invalid memory order") -
@Nate Eldredge open -O2 我的意思是这个选项
标签: c++ gcc memory-barriers stdatomic