Bor*_*rph 8 c++ multithreading atomic compiler-optimization c++11
使用宽松的存储顺序,例如对于引用计数指针,是否允许编译器优化掉后续的递增和递减?
std::atomic_int32_t ai;
for (size_t i = 0; i < 10000; i++)
{
ai.fetch_add(1, std::memory_order_relaxed);
ai.fetch_sub(1, std::memory_order_relaxed);
}
Run Code Online (Sandbox Code Playgroud)
看看反汇编它看起来不像.但是由于允许重新排序并且atomic行为类似于计数器,只是线程安全,人们可以争辩说他可以优化,好像它是一个普通的int.
我相信它可以被优化,除非声明为易失性。原因是,对于任何在其间交错某些线程的调度,都存在不存在的有效调度。我相信 drf-sc 内存模型也是如此。
如果该线程读取介于两者之间的内容,情况就不会如此。