Volatile
2022-07-02 00:24:41   0  举报             
     
         
 AI智能生成
  volatile
    作者其他创作
 大纲/内容
  内存语义    
     当写一个volatile修饰的共享变量时,JMM会把该线程对应的工作内存中共享变量值,立刻刷新会主内存  
     当读一个volatile修饰的共享变量时,JMM会把该线程对应的工作内存中共享变量值设置为无效,重新从主内存读取  
     特性
    
     可见性    
     保证不同线程对共享变量的最新值及时可见,即共享变量一旦改变马上可见    
     JMM内存模型  
     MESI缓存一致性协议保证  
     总线嗅探机制保证  
     不保证原子性    
     从主内存读取共享变量之后,对于共享变量的操作分为了三步(加载、计算、赋值),volatile保证加载数据最新,导致写数据丢失           
     禁止指令重排序
(有序性)
    (有序性)
 什么是重排序    
     编译器、优化器为了优化程序性能,在保证程序执行结果的情况下,会改变程序语句的先后顺序  
     不存在数据依赖关系的可以重排序,存在数据依赖关系的禁止重排序  
     内存屏障    
     读屏障 Load Barrier    
     在读指令之前插入读屏障,让工作内存中的共享变量值立刻失效,重新从主内存读取  
     写屏障 Store Barrier    
     在写指令之后插入写屏障,强制把写的数据刷新回主内存  
     四种规则    
     LoadLoad    
     在每个volatile读操作之后插入一个LoadLoad屏障  
     禁止下面所有的普通读操作和上面的volatile读操作重排序           
     LoadStore    
     在每个volatile读操作之后插入一个LoadStore屏障  
     禁止下面所有的普通写操作和上面的volatile读重排序           
     StoreStore    
     在每个写操作之前插入一个StoreStore屏障  
     禁止上面的普通写和下面的volatile写重排序           
     StoreLoad    
     在每个写操作之后插入一个StoreLoad屏障  
     防止上面的volatile写和下面可能有的volatile读/写重排序           
     JMM    
     8大原子操作           
     read 读取  
     load 加载  
     use 使用  
     assign 赋值  
     store 存储  
     write 写入  
     lock 锁定  
     unlock 解锁  
     原子操作流程图           
     使用场景    
     状态标志位  
     DoubleCheck单例  
     重点    
     volatile特点    
     可见性、不保证原子性、禁止指令重排序(有序性)  
     内存屏障  
    
 
 
 
 
  0 条评论
 下一页
  
   
   
   
   
  
  
  
  
  
  
  
  
  
  
 