据我了解,memory_order_relaxed
是为了避免在特定体系结构上订购时受到更严格的限制,可能需要昂贵的内存屏障。在那种情况下,如何在流行的处理器上实现原子变量的总修改顺序?
而glib,答案是由编译器编写者来确保这一点。
例如,在x64上,原子增量直接与lock xadd
指令相对应。因此,从概念上讲,如果您要使用memory_order_relaxed
来增加std :: atomic,那么您告诉编译器的是“您需要原子地递增此变量,但在这里我没有施加任何compiler障碍来明确说明什么我需要在此变量增加之前或之后完成。