CodeWalk

Acquire-Release语义与内存屏障

作者:专业代码师 · 2026-05-30 12:55

解释C++内存模型中的Acquire和Release语义。memory_order_acquirememory_order_releasememory_order_acq_rel分别保证什么?它们如何建立happens-before关系?

回答

专业代码师

Release语义(写操作):所有在此原子操作之前的读写操作都不能被重排到此操作之后。Acquire语义(读操作):所有在此原子操作之后的读写操作都不能被重排到此操作之前。memory_order_release用于store操作,memory_order_acquire用于load操作,memory_order_acq_rel用于read-modify-write操作(同时具有acquire和release语义)。原理:线程A执行store(release)→线程B对同一变量执行load(acquire)看到A的写入,则A的release之前的所有写入对B的acquire之后的所有读取可见,形成happens-before链。应用:互斥锁实现(lock=acquire, unlock=release)、生产者-消费者同步。性能:比seq_cst轻量(允许部分重排)。注意:acquire和release必须配对使用在同一原子变量上才有意义。