即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
,则将没有这种同步。