0

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

我对了解竞态条件以及在程序继续执行后它们可能携带的内容不感兴趣,方法是使用发生竞态的值。如果 pc 的逻辑被破坏,是的,它们也可能会导致崩溃,但这里我的问题完全是关于硬件和同时线程中 WRITE+READ 的影响。

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

  1. 只是破坏了变量的值,因此所有后续线程都会由于此读/写的交错而读取错误的值?

或者

  1. 在某些情况下,也可能导致应用程序关闭,因为在某些情况下这可能是某种硬件违规。

本质上,我想更多地了解同时物理读取和写入变量的过程以及 PC 的行为。

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

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

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

4

1 回答 1

1

这一切都取决于什么样的硬件和变量的大小。对整数的访问通常是原子的,但对双精度数的访问通常不是。即使对于简单的小值,不同的硬件也可能有非常不同的行为。您需要获取硬件手册的副本。这是一篇讨论这个领域的帖子:一条汇编指令是否总是以原子方式执行?

除非硬件设计不佳,否则读取不会改变写入的行为,但如果读取看到写入的一部分而不是其余部分,则写入可能会导致读取的值不正确。

于 2013-03-20T00:41:24.450 回答