加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

最快的方式来原子比较C中的两个整数?

发布时间:2020-12-16 03:11:47 所属栏目:百科 来源:网络整理
导读:uint64_t n; // two 32-bit integersreturn ( (uint32_t)(n 32) == (uint32_t)n ); 将最高有效位32位与uint64_t的32个最低有效位进行原子比较的最快方式是什么? 我认为一个可怕的解决方案是:获取自旋锁,读取32 LSB,读取32 MSB,比较得到结果,释放自旋锁,返
uint64_t n;      // two 32-bit integers

return ( (uint32_t)(n >> 32) == (uint32_t)n );

将最高有效位32位与uint64_t的32个最低有效位进行原子比较的最快方式是什么?

我认为一个可怕的解决方案是:获取自旋锁,读取32 LSB,读取32 MSB,比较得到结果,释放自旋锁,返回结果.有没有办法做到这一点,而不必采取螺旋锁?

解决方法

如何在两个不同的地址上使用比较交换操作?

像:CMPXCHG(int *)& n,(((int *)& n)1)(注意 – 这实际上不能工作).

编辑:将语法更改为更接近于实际的x86语法.

编辑2:如Serge所指出的,在大多数程序集中不支持在汇编指令中使用两个内存地址,因此这种方法不能直接从内存中工作.这意味着该方法不能用于以原子方式比较64位变量的两个32位部分.

一些程序集(至少PowerPC)能够提供特殊的指令(对于PowerPC,LWARX和STWCX),可以使其以多线程安全的方式工作,但并不完全符合OP要求,也不适用于x86 .

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读