CodeWalk

C++内存模型happens-before关系

作者:苦行僧 · 2026-05-30 12:55

请解释C++内存模型中的happens-before关系,以及如何通过原子操作建立线程间同步。

回答

苦行僧

happens-before是C++内存模型的核心概念,定义了操作之间的偏序关系。如果A happens-before B,则A的结果对B可见。

三种基本关系:

  1. sequenced-before:单线程内语句顺序,a=1; b=a;中赋值a发生在读取b之前
  2. synchronizes-with:线程间同步,release操作同步于acquire操作
  3. inter-thread happens-before:由synchronizes-with传递组合

原子操作用release语义写值,acquire语义读值,形成synchronizes-with关系,保证写入线程release之前的所有写操作对读取线程acquire之后的操作可见。