线程常见锁策略,以及CAS相关内容
来源:http://www.tudoupe.com时间:2022-04-18

我很久没经历过这么多动乱了
希望水逆快快过去。
目录
1.线程常见锁策略
2.CAS
2.1 基于化学文摘社的“原子类”
以化学文摘社为基础的两个旋转锁。
二. 3CAS中的ABA问题
三. 同步锁的优化技术
1.线程常见锁策略
①什么是锁策略:
以下的反应不仅仅是爪哇。 任何和 " 锁 " 相关的话题 , 最有可能的都是关于以下各点。 。 这些属性主要被锁定实现者暗指。
②乐观锁和悲观锁:
乐观锁:
锁定冲突的用意是尽量减少冲突,减少以较低成本和更有效的方式开展的行动。
悲观锁:
由于激烈的冲突,将有更多、更昂贵、效率更低的行动。
举个例子:
当最终试验接近时,我们可以将两类人分为两类。乐观人和悲观人。乐观主义者认为这只是一个考验。没有必要那么紧张,平时学好了,随便复习复习就行。而悲观人呢,就会觉得很紧张,一直不停地复习,从而做得更多,耗费的时间更多,因此,对其它事物的习惯投资减少。显然,这是一个低影响企业。
3个读写锁以及标准交叉锁:
读写锁:
阅读和写作有一个不同的锁定程序。 总共有三个操作:读取锁、写入锁和解锁。 读取锁和读取锁之间没有相互排斥的关系,写入锁和写入锁之间只有读取锁和写入锁之间有相互排斥的关系。
普通的互斥锁:
只要两个或两个以上线索锁定同一对象,它们就可以相互击退。只有两个操作、锁和断开。
有四个重锁和四个灯锁:
重量级锁:
简单地说,它有更多的,更多的。如果锁是根据特定的内核功能执行的,它就被称为重锁。(操作系统中的锁在内核中完成各种各样的功能,例如把线封住。 )
轻量级锁:
轻量级锁是按用户-状态应用的。 (用户-州代码更有效、更容易操作。 )
但总的来说,我们认为乐观主义的锁轻轻,悲观的锁重。
有五个锁和旋转锁:
挂起等待锁:
这往往是通过内核技术实现的,而且往往较重(如典型的重量级锁)。
自旋锁:
这项工作经常通过使用用户国家代码来实现。如果较轻的(轻量级锁的常见认识)失败, 它将立即试图再次获得锁, 无限环, 直到它达到锁。 第一个锁失败, 第二个口味以闪光形式到达。 当其他线条解锁时, 锁可以尽快获得。 越快解锁, 就越有效, 越快解锁, 而不是使用 CPU 资源。 当锁期短时, 它会特别方便 。 后退 : 如果锁定时间太长, CPU 资源会被浪费 。
6个好锁和6个坏锁:
公平锁:
这里的公平锁定显示,在等待锁定时,按抵达顺序执行各种线条。
非公平锁:
它表明,许多线路等待锁,不遵守先到先得的规则,获得锁的可能性相等。
操作系统自身的线条流动是随机的(机会等同),操作系统的motex锁不是一个公平的锁。
7 可连锁,不能连锁:
可重入锁:
同一锁的线索可以锁定好几次。
不可重入锁:
只有一个锁被加到一条线上 任何额外的锁都会导致一个死锁
2.CAS
①解释CAS:
对比和开关 ,意思 :” 比较并交换 “。
②CAS具体操作:
我们假定,记忆中的原始数据五代表先前的预期值A,将需要更新,以适应新的值B。
将A和V比较,看它们是否相等。二. 如果数字比较相等,写B至V(交换)。三. 使行动取得成功。3 化学文摘社虚假代码解释:以下代码不是原子; 真正的 CAS 是来自原子的硬件指令。 这个假代码只是为了帮助理解 CAS 程序 。④CAS的意义:
这一多线代码既提供了安全,也提供了一种新方法和方法。
2.1 基于化学文摘社的“原子类”
1 原子级基于化学文摘社的完整代码解析:
对于经常使用的班级,爪哇标准图书馆包括一系列原子班级。
int, long, int array...它被密封了 它建立在..CAS标准图书馆里可以读到 java. 我不知道你在说什么,直到. 对不起,Cencret. Atomic软件包, 里面所有的课都是这样完成的. 这是很平常的.AtomicInteger其中包括获得和增加等于i++程序。它是一条安全的线,化学文摘社比同步更有效率,因为它以原子级为基础。
synchronized这都是为了确保竞争 这两条线是互相期待的CAS它并不包含堵塞和等待的线条。在此之后,我们使用化学文摘社进行先前进行的自我强化代码操作,同步进行:
执行结果如下:
2 额外的解释,使用以下假代码:
3 利用插图解释为什么这些自我强化程序是安全的:
以化学文摘社为基础的两个旋转锁。
带有旋转锁和解释的伪代码:
②进一步说明:
这里的旋转锁很亮 所以最好先等着瞧
二. 3CAS中的ABA问题(重点)
①什么是ABA?
我们知道,化学文摘社仅仅是一种比较活动,用来交换两个价值。似乎比较实际上是对当前价值和历史价值的比较。但这里有个麻烦发生的一切没有变化中间是换班吗?结果最终没有改变。下面的图表将帮助我们更好地了解律师协会的问题。
就好像我从成都到北京, 然后直奔北京, 然后从成都到河北, 然后从河北到北京, 然后到北京, 但是你们不知道我经历了什么。
以下是这一分析的一个例子以及插图:
愚蠢的旧铁 挖钱买。
在非登记问题方面:
有趣的提款完成后,机器被卡住了,也就是说,有趣的机器又按了一次提款。 这相当于一次两次执行的提款行动(同时执行两条线),但我们的目标是只成功一次,即50美元,余下50美元。
b. 此外,考虑基于化学文摘社的办法:
如果我们来到这里来收钱,就会出现新的问题。 现在,在有趣的时刻,当他的兄弟转移他50岁的时候,有美国律师协会的问题,而这两个巧合导致了Bug, 我们必须解决这个问题。
c. 根据化学文摘社,但不包括ABA:
因此,根据上述分析,这里只有两个行动,实际上只有一个,上述成功是由于没有提出ABA问题,然后我们将进一步审查ABA的导言。
d. CAS的分析基于ABA问题:(我们假设一个撤回,但这里我们采取两个撤回)
3ABA 解决方案:(通过包括版本号加以解决)
为将改变的数据提供版本号。是的。
CAS将数据与当前值和旧值以及版本数与预期值进行比较。 如果当前版本数和前读版本数相同, 您已经完成了修改, 并增加了版本数; 如果当前版本数超过前一个版本数, 操作将被视为失败 。
三. 同步锁的优化技术
1. 同步特性:
这是一个乐观的锁和一个悲观的锁。
b. 不是阅读和写作的锁,只是标准的交叉锁。
c. 既是一个轻量级锁,也是一个重型锁。 (取决于锁的竞争程度。 )
d. a 旋转锁作为轻量级锁的一部分使用。重量水平取决于挂锁。
e. 我不知道你在说什么。
f.可重入锁
②典型的优化手段:
A. 增强/改进的锁(反映同步的自我调整)
在导言之前引入一个概念是什么:在导言之前引入一个概念是什么:在导言之前引入一个概念是什么:偏向锁?
锁定实际上没有锁定; 它只是在锁定对象头中存储一个标记( 记录锁所属线条) 标记实际上没有锁定; 它只是在锁定对象头中存储一个标记( 记录锁所属线条) 。 如果没有其他线条参与竞争性锁定, 锁定操作将无法完成, 降低程序的开支 。 删除偏向锁, 并在大量参与其他线性竞赛后用轻量级锁替换它 。简言之,部分锁只是锁的标记,实际上没有锁,好处是,当没有人竞争时,它节省了锁的费用。我们已经通知你 旋转锁和重锁 所以我们不会再重复了
b.锁粗化/锁细化
此处的粗糙度与锁的大小有关。
(粒子大小表示锁定代码所涉的代码范围; 锁定代码范围越大, 锁定代码范围越厚; 锁定代码范围越小, 锁定代码范围越细)
那么,锁的大小是厚的还是细的?它有其自身的一系列好处:
如果锁粒子大小较大,许多线条之间的共性就会更大。
随着锁的大小的增加,锁的费用会减少。
汇编者将包括以下优化:
如果某一地点的密码锁的大小太薄,则自动确定粗粗大小。
如果两个锁之间的距离很大(它们之间的代码更多 ), 这种优化不太可能发生。 如果锁之间的间隔相对较小( 中间的代码较少 ), 这种优化很可能发生 。c.锁消除
例如,如果你在单行中使用字符串缓冲和矢量, 它就像你锁定在单行。
例如,请考虑 StringBuffer () 。
代码:
然而,就一条线而言,这种锁定显然没有必要,浪费了资源。
因此, 编译者和 JVM 评估该锁是否可以被移除。 如果它正常的话, 它就消失了。 这意味着有别的东西不应该被锁定, 但是您无意地放置了锁, 编译者似乎没有必要添加这个锁, 所以编译者只是删除了锁 。
感谢观看~![]()
相关新闻
- 2023-04-16 2台电脑怎么共享(2台电脑怎么共享
- 2023-04-16 主板检测卡代码(电脑主板检测卡代
- 2023-04-16 dnf未响应(dnf未响应老是上不去)
- 2023-04-16 ppoe(pppoe拨号上网)
- 2023-04-16 网速不稳定(网速不稳定是路由器的
- 2023-04-16 wds状态(Wds状态成功)
- 2023-04-16 光标键(光标键不动了怎么办)
- 2023-04-16 电脑提速(电脑提速100倍的方法)
- 2023-04-16 切换用户(切换用户怎么切换回来
- 2023-04-16 数据包是什么(产品数据包是什么
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|











