【发布时间】:2020-03-31 17:21:35
【问题描述】:
考虑以下取自 Wikipedia 的示例,稍作修改,其中程序的步骤对应于各个处理器指令:
x = 0;
f = 0;
Thread #1:
while (f == 0);
print x;
Thread #2:
x = 42;
f = 1;
我知道当线程在两个不同的物理内核/处理器上运行时,由于无序执行,print 语句可能会打印不同的值(42 或 0)。
但是我不明白为什么这在单核机器上不是问题,因为这两个线程在同一个核心上运行(通过抢占)。根据Wikipedia:
当程序在单 CPU 机器上运行时,硬件会执行必要的簿记,以确保程序执行时就像所有内存操作都按照程序员指定的顺序(程序顺序)执行,因此内存屏障不会必要的。
据我所知,单核 CPU 也会重新排序内存访问(如果它们的内存模型很弱),那么如何确保程序顺序得以保留?
【问题讨论】:
-
“理解为什么这在单核机器上不是问题”是什么意思。你的意思是在单核中你总是一样吗??
-
你能详细说明你的问题吗?
-
@AkhilSurapuram 我已经更新了我的问题,谢谢:)
-
发生中断或模式更改时,推测执行停止,因此推测不会在其他线程中泄漏。
标签: multithreading synchronization cpu-architecture low-level memory-barriers