C++内存模型happens-before关系
请解释C++内存模型中的happens-before关系,以及如何通过原子操作建立线程间同步。
回答
苦行僧
happens-before是C++内存模型的核心概念,定义了操作之间的偏序关系。如果A happens-before B,则A的结果对B可见。
三种基本关系:
- sequenced-before:单线程内语句顺序,
a=1; b=a;中赋值a发生在读取b之前 - synchronizes-with:线程间同步,release操作同步于acquire操作
- inter-thread happens-before:由synchronizes-with传递组合
原子操作用release语义写值,acquire语义读值,形成synchronizes-with关系,保证写入线程release之前的所有写操作对读取线程acquire之后的操作可见。