热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

compare_exchangeC++函数如何确定竞争条件?

如何解决《compare_exchangeC++函数如何确定竞争条件?》经验,为你挑选了1个好方法。

如我们所知,compare_exchange_weak()如果存在竞争条件,则返回错误(错误值),因此无法完全执行操作.但是竞争条件究竟是如何确定的compare_exchange_weak()

lock cmpxchg如果多一个线程尝试读/写值,即获取锁,并且确切地说这种方式compare_exchange_weak决定竞争条件,指令是否会返回错误?



1> 眠りネロク..:

cmpxchg指令影响该ZF标志:如果交换成功则设置,否则清除.

让我们看一个例子:

std::atomic a;

bool my_compare_exchange(int expected, int desired) {
   bool succeeded = a.compare_exchange_weak(expected, desired);
   return succeeded;
}

该函数my_compare_exchange()被转换为以下汇编代码:

my_compare_exchange:
        mov     eax, edi
        lock cmpxchg    DWORD PTR a[rip], esi
        sete    al // <-- conditional instruction
        ret

如果交换成功(即设置为),则将寄存器al设置为1使用.否则,它被设置为零(即被清除).sete alZFcmpxchgZFcmpxchg


推荐阅读
author-avatar
发出耀眼气息
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有