人们为什么使用原子交换而不是存储?

问题描述 投票:1回答:1

即C ++

atomic_int turn(0)

turn.exchange(1);
turn.store(1);

这两个代码的工作方式相同,对吗?但是我检查了许多有关锁使用第一示例的示例。

为什么?

c++ atomic atomicity
1个回答
0
投票

两条语句都将值存储到原子变量中。 exchange调用返回先前保存的值,在这种情况下,该值将被丢弃。但是,这并不意味着两个调用完全相同。 exchange操作是读-修改-写操作,而store操作仅是写操作。这意味着如果我们有:

// thread 1
turn.store(0);  // A

// thread 2
turn.exchange(1);  // B

并且如果线程2读取线程1所存储的值,则行A与行B同步。如果线程2使用store而不是exchange,则将没有这种同步。

© www.soinside.com 2019 - 2024. All rights reserved.