language-agnostic - 原子指令

标签 language-agnostic synchronization nonblocking atomicity test-and-set

原子指令是什么意思?

以下如何成为原子的?

测试与设置

int TestAndSet(int *x){
   register int temp = *x;
   *x = 1;
   return temp;
}

从软件的角度来看,如果不想使用非阻塞同步原语,如何保证指令的原子性?是否只能在硬件或某些汇编级指令优化中使用?

最佳答案

一些机器指令本质上是原子的——例如,读取和写入正确对齐的 native 处理器字长值在许多体系结构上是原子的。

这意味着硬件中断、其他处理器和超线程无法中断对同一位置的读取或存储以及读取或写入部分值。

更复杂的事情,例如原子地读取和写入,可以通过显式原子机器指令来实现,例如在 x86 上锁定 CMPXCHG。

锁定和其他高级构造建立在这些原子原语上,它们通常只保护单个处理器字。

一些聪明的并发算法可以只使用指针的读写来构建,例如在单个读者和作者之间共享的链接列表中,或者通过努力,多个读者和作者。

关于language-agnostic - 原子指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1762148/

相关文章:

language-agnostic - 你如何使用 +-*/实现 XOR?

java - 为什么输出每次都不同而不是同步块(synchronized block)

java - 如何在Java中以非阻塞方式列出目录中的文件?

java - 删除无响应的 channel - java

algorithm - 解决问题的动态规划技术

language-agnostic - 关于使用 My 作为类名前缀的意见

oop - "ctor"在类构造函数中代表什么?

java - 如何确定一个对象是否被锁定(同步)以免在 Java 中阻塞?

Java RMI方法同步

java - 如果 Web 服务器是非阻塞的,这是否意味着它处理 IO 的方式与 node.js 相同?