java 重现CPU乱序执行问题

来源:互联网 发布:软件企业工时管理 编辑:程序博客网 时间:2024/05/16 18:16

下面的代码,将 setted 变量的 volatile 修饰符去掉则会导致线程 w 死循环在 while(!setted);这一句上。这是由于 w 线程取 setted 值被优化为直接从本 CPU 的 cache-line 中取的缘故。只需要将 setted 变量定义为 volatile 的,对于这个变量的访问便具有 acquire(读) 和 release (写) 语义,于是便观察不到这个现象了。


0 0