易失性变量语义

Volatile variables semantics

我有几个关于不长的 volatile 变量的问题,double

1.is 当我们写入和读取时可能会出现竞争条件 - 例如 - 当我们读取一个 volatile 变量时,有人可以写入一个新值并且读取线程不会获得更新的值?

2.can 2 个写入线程写入值,最后,其中一个将与另一个的结果重叠,也可以同时读取多个线程的 volatile,这意味着读取线程重叠并且所有人同时读取相同的结果?

3.If 我们在 1 个 volatile 变量上启动 5 个读取和 5 个写入线程,结果对于读者来说是不可预测的?

  1. 是的。您不知道哪个先发生,因此您的阅读线程会看到两个值之一。

  2. 当然,如果你的意思是覆盖。如果您有 2 次写入,则最后一次获胜。如果您的意思是重叠,因为结果值成为两次写入的组合,那么不会。甚至没有 longdouble.

  3. 当然可以。除非你有例如 volatile int foo = 0; 并且所有的作者都写 0。那你保证所有的读者都能看到0,否则就看排期之类的了。

你所有的问题看起来都像你期望 volatileorder 有关,但事实并非如此。它只是保证可见性。如果你想要命令,你必须自己执行。