【发布时间】:2020-02-16 18:46:01
【问题描述】:
在Core2 Duo等具有两个执行单元的计算系统中,如果同一进程中由操作系统(内核级线程)管理的两个线程在运行时访问同一个虚拟内存地址会怎样?
嗨,我想了解用户级线程和内核级线程之间的区别以及访问虚拟 memory 地址?还是物理内存地址?...
我不知道这些程序是否不会崩溃并且两者都会给出预期的结果,或者这些程序是否不会崩溃但都会给出意想不到的结果,或者这些程序可能会崩溃。
什么应该指导我?
谢谢。
【问题讨论】:
-
除非他们使用locking,否则行为将是未定义的,这意味着在不同的系统上你会看到不同的东西——崩溃、部分或不一致的内存更改等。
-
首先,在千兆赫频率和纳米距离的背景下准确定义“同一时间”。
-
@AndrewHenle 我认为这里不需要对“同一时间”进行任何特殊定义。
-
@MaximEgorushkin 鉴于任何答案都必须依赖于底层硬件的设计方式,如果不解决“同一时间”的真正含义,就无法描述“发生了什么”。两个不同的 CPU 试图访问同一个 RAM?同一个 CPU 上的两个线程访问同一个缓存?当信号以千兆赫频率在纳米距离上通过数百万个晶体管运行时,信号“同时”发生的想法几乎没有意义。这个问题隐含地假设答案是可能的,但未能解释任何关键的潜在细节。
-
@AndrewHenle IMO,你无缘无故地把事情复杂化了。两个线程可以大致同时产生缺页中断,并争夺对内核数据结构的访问。这种争用通过使用同步原语以通常的方式解决。
标签: multithreading parallel-processing operating-system