能否翻译一下下面这段出自于《c++ concurrency in action》中关于C++内存模型的描述

要准确理解这个,首先需要看synchronizes-with以及happens-before的定义。对于一般的原子操作,如果他们直接没有任何上述关系,那么优化器可以方便地把该变量缓存到诸如寄存器什么的地方,只要保证读取和写入的原子性(从上层调用者看来)即可。这就是relaxed的语义。
如果要建立synchronizes-with关系,必须确保对该原子变量的写操作对于所有建立有synchronizes-with关系的线程都可见。简单粗暴的做法是强制的让所有的线程(无论有无synchronizes-with关系)都可见,这就是“序列一致”语义。
序列一致简单是简单,但是要求太严格。因为我们只想在相关的线程上保持序列一致即可。要满足这个条件,一个简单的办法是让相关的线程给这个原子变量打标记,告诉编译器说,注意,针对这个变量的写操作,必须保证所有的打了标记的线程的读操作都能立即看到。这就是acquire/release语义。

■网友
section5.3.1解释的是synchronizes-with这个概念,我的理解就是解释两个CPU操作(单线程内或者多线程内)在什么情况下算是“同步”的。首先要知道程序在编译、执行过程中可能发生reorde——即指令重排。CPU实际的指令执行顺序称为“memory ordering”。在memory ordering中,有相邻的两个操作write x/read x(当然,中间也可以有对其他变量的操作),那么,read到的x一定是write到的值,这就是“同步”。你要问,这不是很显然的吗?请搜索“CPU高速缓存一致性”的相关介绍,简单来说,如果没有CPU缓存一致性,上述两个操作就可能得不到正确的结果。内存模型均以CPU缓存一致性模型为基础,所以在介绍C++内存模型之前,作者先简要介绍了一下CPU操作的同步这个概念。大致翻译:无论在何种指令重排模式(强一致性、弱一致性)下,程序中(programming order)对x变量的write或者后续对x的写或者其他线程对x的写,或者把写改成RMW,在实际的CPU执行顺序中(memory order)对x的读到的值就是刚刚对x的写入的值。
■网友
不会翻译,尝试解释一下。对于一个原子变量 x,当一个正确标记的 atomic write (标记是指 acquire release relax等)和一个正确标记的atomic read 同步时,read 只能读到以下几种情况下的值:1. 最开始那个 atomic write 的值2. 同一线程之后的 atomic write 的值3. 任意线程的 atomic modify-write 的值简单说,当你去读一个原子变量时,你要么读到初始值,要么读到后续的原子写入,不可能读到其它莫名其妙的值(这在非原子操作中是有可能出现的)错了请指正
■网友
内存模型还是《Java Concurrency in Practice》讲得比较易懂。
■网友
你如果要理解这段话,还是建议先参考一下下面这段话:
Back in section 5.3.1, I mentioned that you could get a synchronizes-with relationship
between a store to an atomic variable and a load of that atomic variable from another
thread, even when there’s a sequence of read-modify-write operations between the
【能否翻译一下下面这段出自于《c++ concurrency in action》中关于C++内存模型的描述】 store and the load, provided all the operations are suitably tagged. Now that I’ve covered the possible memory-ordering “tags,” I can elaborate on this. If the store is
tagged with memory_order_release, memory_order_acq_rel, or memory_order_
seq_cst, and the load is tagged with memory_order_consume, memory_order_acquire,
or memory_order_seq_cst, and each operation in the chain loads the value written
by the previous operation, then the chain of operations constitutes a release sequence


推荐阅读