从单独的线程读取和写入同一变量时的硬件状态

时间:2013-03-20 00:25:22

标签: multithreading hardware race-condition

我的问题范围严格限于同时读取和写入内存中的地址以及硬件中发生的事情。

我对通过使用此种族发生的值继续执行之后了解种族状况以及他们可能携带的内容不感兴趣。如果pc的逻辑被破坏,是的,它们也可能带来崩溃,但在这里我的问题是严格关于硬件和同时线程的WRITE + READ的影响。

问题:假设我从一个线程写一个变量,我从另一个线程读取同一个变量。会发生什么?

  1. 只是破坏变量的值,以便所有后续线程都会读取   由于此读/写的交错而导致错误的值?
    1. 在某些情况下,也可能导致应用程序停机,因为在某些情况下可能会出现某种类型的硬件违规行为。
    2. 基本上我想知道更多关于变量同时进行物理读写过程以及PC行为的过程。

      我正在使用LINUX和C ++,我对2个案例感兴趣

      • 同一物理核心上的2个线程

      • 2个独立核心上的2个线程

1 个答案:

答案 0 :(得分:1)

这一切都取决于什么样的硬件和变量的大小。对整数的访问通常是原子的,但访问双精度通常不是。即使对于简单的小值,不同的硬件可能具有非常不同的行为您需要获得硬件手册的副本。这是一篇讨论该领域的帖子:Does one assembler instruction always execute atomically?

读取不会改变写入行为,除非硬件设计不合理,但如果读取部分写入而不是其余部分,则写入会导致读取的值不正确。