当前位置:  开发笔记 > 编程语言 > 正文

C++ int操作是否在mips体系结构上是原子的

如何解决《C++int操作是否在mips体系结构上是原子的》经验,为你挑选了2个好方法。

我想知道我是否可以在没有锁定mips cpu(尤其是Amazon或Danube)的情况下读取或写入共享int值.我的意思是如果这样的读或写是原子的(其他线程不能中断它们).要清楚 - 我不想阻止线程之间的竞争,但我关心int值本身是否已损坏.

假设编译器在cpu字的边界处对齐所有的int,它应该是可能的.我用gcc(g ++).测试还表明它似乎正常工作.但也许有人肯定知道吗?



1> rmmh..:

使用gcc的内置原子操作,如果它们不受支持,你会收到警告:http: //gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/Atomic-Builtins.html

看起来在硬件上可以进行加/减和测试(至少)的组合:http: //rswiki.csie.org/lxr/http/source/include/asm-mips/atomic.h



2> sfossen..:

取决于操作.在MIPS中盯着足够的反汇编程序,我知道只有一些操作是原子的.

分配一个新值可能是1 op或更多,你必须看看程序集.

例如:

x = 0; // move $a0, $0


x = 0x50000; // lui $a0, 0x0005


x = 0x50234; // lui $a0, 0x0005
             // ori $a0, 0x0234

MIPS汇编参考或此处

看到这里看多瑙河和亚马逊是MIPS32,我的例子涵盖了,因此不是所有32位整数立即可以原子写入.

在上面的帖子中看到R10000是MIPS64.由于32位值是寄存器大小的一半,因此可能是原子加载/写入.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有