原子操作是如何实现线程安全的?我已经在维基百科有关线程安全的文章中阅读了相关内容。但该文章并没有真正解释背后的过程。换句话说,为什么线程A执行的“原子”操作不能被线程B打断?
原子操作是如何实现线程安全的?我已经在维基百科有关线程安全的文章中阅读了相关内容。但该文章并没有真正解释背后的过程。换句话说,为什么线程A执行的“原子”操作不能被线程B打断?
原子操作要么完成,要么完全未完成。其他线程将无法看到操作“正在进行”--它永远不会被视为部分完成状态。在这个上下文中,“原子”一词的含义就是这样。
使这个保证成立的后台魔术因实现而异。对于并发设计,您只能依赖于执行的全部或无事可做的保证。
比较并设置是一条机器指令,因此不会被中断。
从这个意义上讲,所有的机器指令都是原子性的,这并不是很有趣。例如,简单的写操作总是原子性的。
“有趣”的原子操作是那些直观地由两个或多个步骤组成,但实现为一个不可分割的步骤,例如比较并设置;在32位机器上对长整型进行易失性读/写操作。