TwI*_*ITe 3 c++ multithreading x86-64 atomic compare-and-swap
如我们所知,compare_exchange_weak()如果存在竞争条件,则返回错误(错误值),因此无法完全执行操作.但是竞争条件究竟是如何确定的compare_exchange_weak()?
lock cmpxchg如果多一个线程尝试读/写值,即获取锁,并且确切地说这种方式compare_exchange_weak决定竞争条件,指令是否会返回错误?
该cmpxchg指令影响该ZF标志:如果交换成功则设置,否则清除.
让我们看一个例子:
std::atomic<int> a;
bool my_compare_exchange(int expected, int desired) {
bool succeeded = a.compare_exchange_weak(expected, desired);
return succeeded;
}
Run Code Online (Sandbox Code Playgroud)
该函数my_compare_exchange()被转换为以下汇编代码:
my_compare_exchange:
mov eax, edi
lock cmpxchg DWORD PTR a[rip], esi
sete al // <-- conditional instruction
ret
Run Code Online (Sandbox Code Playgroud)
如果交换成功(即设置为),则将寄存器al设置为1使用.否则,它被设置为零(即被清除).sete alZFcmpxchgZFcmpxchg
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |