【发布时间】:2016-05-01 08:07:37
【问题描述】:
在 JCIP 第 15.2 B 节中,Goetz 提到,在现代处理器中,有一组指令,如 比较和交换 (CAS),它们允许我们执行非阻塞更新操作。
他特别说
CAS 有三个操作数 - 一个要操作的内存位置 V,预期的 旧值 A,新值 B。CAS 原子地将 V 更新为新值 B, 但前提是 V 中的值与预期的旧值 A 匹配。
现在考虑一个多处理器系统。如果两个不同的处理器尝试在完全相同的时间比较和交换同一内存位置,会发生什么?
处理器彼此不知道。这种情况如何处理?
【问题讨论】:
-
可能是 What happens if two process in different processors try to acquire the lock at EXACTLY same time 的副本。基本上:处理器可能不知道彼此,但总线控制器知道它们两者。
-
即使你有一个跨集群运行的 JVM(我不知道有一个,但理论上可以做到),你也可以获得这些语义——尽管使用了相当慢的机制(跨集群协商等)。
标签: java multithreading