易失性变量语义
Volatile variables semantics
我有几个关于不长的 volatile 变量的问题,double
1.is 当我们写入和读取时可能会出现竞争条件 - 例如 - 当我们读取一个 volatile 变量时,有人可以写入一个新值并且读取线程不会获得更新的值?
2.can 2 个写入线程写入值,最后,其中一个将与另一个的结果重叠,也可以同时读取多个线程的 volatile,这意味着读取线程重叠并且所有人同时读取相同的结果?
3.If 我们在 1 个 volatile 变量上启动 5 个读取和 5 个写入线程,结果对于读者来说是不可预测的?
是的。您不知道哪个先发生,因此您的阅读线程会看到两个值之一。
当然,如果你的意思是覆盖。如果您有 2 次写入,则最后一次获胜。如果您的意思是重叠,因为结果值成为两次写入的组合,那么不会。甚至没有 long
和 double
.
当然可以。除非你有例如 volatile int foo = 0;
并且所有的作者都写 0
。那你保证所有的读者都能看到0
,否则就看排期之类的了。
你所有的问题看起来都像你期望 volatile
与 order 有关,但事实并非如此。它只是保证可见性。如果你想要命令,你必须自己执行。
我有几个关于不长的 volatile 变量的问题,double
1.is 当我们写入和读取时可能会出现竞争条件 - 例如 - 当我们读取一个 volatile 变量时,有人可以写入一个新值并且读取线程不会获得更新的值?
2.can 2 个写入线程写入值,最后,其中一个将与另一个的结果重叠,也可以同时读取多个线程的 volatile,这意味着读取线程重叠并且所有人同时读取相同的结果?
3.If 我们在 1 个 volatile 变量上启动 5 个读取和 5 个写入线程,结果对于读者来说是不可预测的?
是的。您不知道哪个先发生,因此您的阅读线程会看到两个值之一。
当然,如果你的意思是覆盖。如果您有 2 次写入,则最后一次获胜。如果您的意思是重叠,因为结果值成为两次写入的组合,那么不会。甚至没有
long
和double
.当然可以。除非你有例如
volatile int foo = 0;
并且所有的作者都写0
。那你保证所有的读者都能看到0
,否则就看排期之类的了。
你所有的问题看起来都像你期望 volatile
与 order 有关,但事实并非如此。它只是保证可见性。如果你想要命令,你必须自己执行。