原子指令是什么意思?
以下如何成为原子的?
测试与设置
int TestAndSet(int *x){
register int temp = *x;
*x = 1;
return temp;
}
从软件的角度来看,如果不想使用非阻塞同步原语,如何保证指令的原子性?是否只能在硬件或某些汇编级指令优化中使用?
最佳答案
一些机器指令本质上是原子的——例如,读取和写入正确对齐的 native 处理器字长值在许多体系结构上是原子的。
这意味着硬件中断、其他处理器和超线程无法中断对同一位置的读取或存储以及读取或写入部分值。
更复杂的事情,例如原子地读取和写入,可以通过显式原子机器指令来实现,例如在 x86 上锁定 CMPXCHG。
锁定和其他高级构造建立在这些原子原语上,它们通常只保护单个处理器字。
一些聪明的并发算法可以只使用指针的读写来构建,例如在单个读者和作者之间共享的链接列表中,或者通过努力,多个读者和作者。
关于language-agnostic - 原子指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1762148/