在一个多核 x86 机器上,假设一个线程在 core1 上执行并且同时递增一个整数变量 a,与此同时,在 core2 上的另一个线程也递增了它。给定 a 的初始值为 0,最终值总是 2 吗?或者可能有其他值吗?假设 a 被声明为 volatile 并且我们不使用原子变量(如 C++ 的 atomic<> 和 gcc 中内置的原子操作)。
如果在这种情况下,a 的值确实总是 2,那么这是否意味着在 x86-64 上的 long int 也具有相同的特性,即最终 a 始终为 2?
如果在这种情况下,a 的值确实总是 2,那么这是否意味着在 x86-64 上的 long int 也具有相同的特性,即最终 a 始终为 2?
volatile
关键字无法实现原子访问。 - Cat Plus Plus