ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

锁与并发 synchronized(1)

2022-08-20 12:04:30  阅读:211  来源: 互联网

标签:缓存 变量 synchronized 工作 并发 线程 内存 作用


 

1.synchronized 锁的升级过程:

  

 

   由于并发量不同,争抢的激烈程度不同出现锁的升级。

  锁升级不可逆。

 

2.为什么要使用锁。

  对共有资源的操作,因为对同一资源涉及多数据的复制,使用,回写等不能保证资源的原子性。

即围绕共有资源的原子性和有序性,可见性。

  cup处理数据需要遵循

  2.1JMM模型

   (1)lock(锁定): 作用于主内存的变量,把一个变量标记为一条线程独占状态 

  (3)read(读取): 作用于主内存的变量,把一个变量值从主内存传输到线程的工作内存中, 以便随后的load动作使用 

  (4)load(载入): 作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作 内存的变量副本中 

  (5)use(使用): 作用于工作内存的变量,把工作内存中的一个变量值传递给执行引擎 

  (6)assign(赋值): 作用于工作内存的变量,它把一个从执行引擎接收到的值赋给工作内存 的变量 

  (7)store(存储): 作用于工作内存的变量,把工作内存中的一个变量的值传送到主内存中, 以便随后的write的操作 

  (8)write(写入): 作用于工作内存的变量,它把store操作从工作内存中的一个变量的值传送 到主内存的变量中

  (2)unlock(解锁): 作用于主内存的变量,把一个处于锁定状态的变量释放出来,释放后的 变量才可以被其他线程锁定 

  2.2 MESI 缓存一致性协议

  1. 数据刷回主内存
  2. 行缓存
  3. 缓存一致性协议
  4. 内存屏障
  5. io总线风暴

  2.3嗅探机制

      每个处理器会通过嗅探器来监控总线上的数据来检查自己缓存内的数据是否过期,如果发现自己缓存行对应的地址被修改了,就会将此缓存行置为无效。 当处理器对此数据进行操作时,就会重新从主内存中读取数据到缓存行.

 

3.volatile

  保障变量的可见性和禁止重排序,不能保证原子性。

  可见性:  实现缓存一致性协议   重排序: 禁止重排序。     

volatile是保障缓存中的数据的可见性,如果线程已经开始操作赋值,无法修改。

 

标签:缓存,变量,synchronized,工作,并发,线程,内存,作用
来源: https://www.cnblogs.com/dhdnm/p/16607400.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有