[英]Are C++ int operations atomic on the mips architecture
我想知道我是否可以在没有锁定mips cpu(尤其是Amazon或Danube)的情况下读取或写入共享int值。 我的意思是如果这样的读或写是原子的(其他线程不能中断它们)。 要清楚 - 我不想阻止线程之间的竞争,但我关心int值本身是否已损坏。
假设编译器在cpu字的边界处对齐所有的int,它应该是可能的。 我用gcc(g ++)。 测试还表明它似乎正常工作。 但也许有人肯定知道吗?
使用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
哪个操作? int a; a=42;
似乎是合理int a; a=42;
int a; a=42;
是原子的。 不能保证a= a+42;
是原子的,或者像++
这样的任何变体。 此外,您必须关注优化器可能会执行的操作,例如在方便时将中间值保存在寄存器中。
这个问题会引起误导性的答案。
您只能权威地回答有关汇编/机器语言的“是原子”问题。
任何给定的C / C ++代码片段都不做任何保证,可以根据您使用的确切的编译器(和版本)等而有所不同(除非您调用某些特定于平台的内在函数或者保证编译为已知原子机器指令的东西。 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.