再说 c++11 内存模型(三)
// 6
让我?嗦点指出其中一个关键,#2 和 #5 能建立 synchronize-with 关系的关键在于 exchange 是一个 RMW 操作,且它的读部分是要求能够读到最新的值(c++ 标准 29.3.12),因此当 thread 0 先执行时,turn 会被以 release 的方式被写入一个值,再然后后面 thread 1 执行 #3 ,会以 acquire 的方式对 turn 进行读取,因为 RMW 保证它的 load 会 load 到最新的值,因此此时 #2 synchronize-with #5,皆大欢喜。