Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我对 volatile 变量如何有效地从“主”内存访问有点困惑。它与具有本地副本的变量(非易失性)有何不同?每当多个线程访问非易失变量和易失变量时,典型的工作流程是什么?我的意思是他们如何在幕后工作?
假设您有一个可以被多个线程访问的变量。
线程 1 查看变量。因为查看共享内存比线程本地内存更昂贵,所以它会复制变量。(请注意,不会复制对象,只会复制它的引用。)
线程 2 查看相同的变量。它决定改变变量。但是线程1不知道!线程 1 仍在使用陈旧数据。这是一件非常糟糕的事情。通过 make 它volatile,每个线程在访问它时必须查看原始变量。他们不允许制作本地副本,因此不会过时。
volatile