那就是C++
atomic_int turn(0)
turn.exchange(1);
turn.store(1);
这两个代码的作用方式是相同的,对吗? 但是我查看了许多关于锁的例子都使用第一个。
为什么?
这两个语句都将一个值存储到原子变量中。 exchange
调用返回先前保存的值,而在本例中,该值被丢弃。但是,这并不意味着这两个调用完全相同。 exchange
操作是一种读取-修改-写入操作,而 store
操作仅是写入操作。这意味着如果我们有:
// thread 1
turn.store(0); // A
// thread 2
turn.exchange(1); // B
如果线程2读取了线程1存储的值,则A行与B行同步。如果线程2使用 store
而不是 exchange
,则没有这样的同步。