2

我对 volatile 变量如何有效地从“主”内存访问有点困惑。它与具有本地副本的变量(非易失性)有何不同?每当多个线程访问非易失变量和易失变量时,典型的工作流程是什么?我的意思是他们如何在幕后工作?

4

1 回答 1

5

假设您有一个可以被多个线程访问的变量。

线程 1 查看变量。因为查看共享内存比线程本地内存更昂贵,所以它会复制变量。(请注意,不会复制对象,只会复制它的引用。)

线程 2 查看相同的变量。它决定改变变量。但是线程1不知道!线程 1 仍在使用陈旧数据。这是一件非常糟糕的事情。通过 make 它volatile,每个线程在访问它时必须查看原始变量。他们不允许制作本地副本,因此不会过时。

于 2012-08-04T15:14:20.270 回答