从顺序性代码的角度来看,线程 1 中的代码 ‘while (a.load() == x)’ 似乎是一个无限循环,编译器编译这段代码时也可能会直接将其优化为一个无限循环(译注:优化为 while (true...); 之类的指令);但实际上,我们必须保证每次循环都对 a 执行读取操作(a.load()) 并且将其与 x 进行比较,否则线程 1 和 线程 2 将不能正常工作(译注:线程 1 将进入无限循环,与正确的执行结果不一致...消费/释放模式(consume/release)
消费/释放模式是对获取/释放模式进一步的改进,该模式下,非依赖共享变量的先发生于关系不再成立....(译注:这里说因为没有涉及(非原子)共享变量所以导致消费/释放模式和获取/释放模式表现一致应该是不准确的,将示例中的 assert (y.load(memory_order_consume) == 20...最后要说明的一点是: 混合使用内存模式是危险的,尤其是当模式中包含宽松模式的时候.小心的混合使用 顺序一致模式(seq_cst) 和 获取/释放模式(acquire/release) 应该是可行的,但是需要你熟稔这两个模式的各种工作细节