![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
文章平均质量分 59
wendi➣
人生如程序,要么循环,要么选择
展开
-
volatile深入
1.在多个个线程工作内存看起来互无关联的情况下是怎么做到保证变量的可见性的?最初通过总线,总线就是一条共享的通信链路,它用一套线路来连接多个子系统。最初实现就是通过总线加锁的方式也就是上面的lock与unlock操作,但是这种方式存在很大的弊端。会将我们的并行转换为串行,从而失去了多线程的意义。因为内存和CPU的速度差太多,为了解决数据不一致问题,在CPU内部设置了少量的高速缓存,目前流行的3级缓存,那么如何在多核情况下又有多个L1级缓存,来保证数据一致性,这时候推出了MESI缓存一致性协议。然后CPU原创 2021-10-09 09:23:16 · 57 阅读 · 0 评论 -
AQS简介
AQS数据结构是基于虚拟的双向链表(CLH)加state资源的状态,底层还是基于CAS算法,通过CAS自旋来进行修改state的值CLH就是虚拟的双向队列。没有实际的队列,将请求封装成CLH队列中的一个结点,结点和结点存在关系里面的核心方法,通过tryAcquire尝试获取锁,然后通过addWaiter进行CAS,然后加入CLH中,acquireQueued判断是否可以获取锁,当线程到CLH队列头部的时候,进行一个尝试获取锁,更新锁的状态,如果更新成功,就表示获取到了锁然后移除队列。AQS定义两种资源原创 2021-06-10 15:59:25 · 115 阅读 · 0 评论