今天我遇到了这个问题:
你有一个代码
static int counter = 0;
void worker() {
for (int i = 1; i <= 10; i++)
counter++;
}
如果worker
从两个不同的线程调用counter
,它们都完成后会有什么值?
我知道实际上它可以是任何东西。但我的内心告诉我,这counter++
很可能会被翻译成单个汇编指令,如果两个线程都在同一个内核上执行,则为counter
20。
但是,如果这些线程在不同的内核或处理器上运行,它们的微码中是否存在竞争条件?一条汇编指令是否总是可以被视为原子操作?