在 C++ 中,我们有关键字volatile和atomic类。它们之间的区别是,volatile 不保证线程安全的并发读写,而只是保证编译器不会将变量的值存储在缓存中,而是从内存中加载变量,而 atomic 保证线程安全的并发读写。
众所周知,原子读操作是不可分割的,即当一个或多个线程读取变量的值时,两个线程都不能将新值写入变量,所以我认为我们总是读取最新值,但我不确定:)
所以,我的问题是:如果我们声明原子变量,我们是否总是获得变量调用load()操作的最新值?
如我们所知,compare_exchange_weak()如果存在竞争条件,则返回错误(错误值),因此无法完全执行操作.但是竞争条件究竟是如何确定的compare_exchange_weak()?
lock cmpxchg如果多一个线程尝试读/写值,即获取锁,并且确切地说这种方式compare_exchange_weak决定竞争条件,指令是否会返回错误?