Concurrency 如何理解这些自旋锁的实现?
我很难从编程语言语用学(Scott)中理解自旋锁。如果您能更清楚地解释,我将不胜感激。谢谢Concurrency 如何理解这些自旋锁的实现?,concurrency,synchronization,programming-languages,computer-science,Concurrency,Synchronization,Programming Languages,Computer Science,我很难从编程语言语用学(Scott)中理解自旋锁。如果您能更清楚地解释,我将不胜感激。谢谢 虽然所有这些算法在历史上都很重要,但实际上 自旋锁需要在恒定的时间和空间中运行,对于这个 需要一个原子指令,它的功能不仅仅是加载或存储。 从20世纪60年代开始,硬件设计师开始装备他们的 具有读取、修改和写入内存指令的处理器 作为单个原子操作的位置。最简单的指示 被称为测试和设置。它将布尔变量设置为true和true 返回变量以前是否为false的指示。 给定测试_和_集,获取自旋锁几乎是微不足道的:
测试和设置
。它将布尔变量设置为true和true
返回变量以前是否为false的指示。
给定测试_和_集,获取自旋锁几乎是微不足道的:
while not test_and_set(L)
–– nothing –– spin
L
的值是什么意思
当且仅当L
为真时,test\u和\u set(L)
是否返回false
为什么它可以作为旋转锁工作type lock = Boolean := false;
procedure acquire lock(ref L : lock)
while not test and set(L)
while L
–– nothing –– spin
procedure release lock(ref L : lock)
L := false
图13.8一个简单的测试和测试_和_设置锁。等待过程
使用普通读取(加载)指令旋转,直到锁显示为
自由,然后使用test_和_set获取它。第一次访问是
普通(无竞争)情况下的速度测试集
“普通读取(加载)指令”是否指该指令
在中读取L
,而在中读取L
这种方法如何比第一种更好
L
在锁空闲时设置为0,在锁被人锁定时设置为1
当且仅当L为真时,测试_和_集(L)是否返回false
是的,在您提到的引文中有明确描述:“返回变量以前是否为假的指示”
为什么它可以作为旋转锁工作
它满足上述变量L
的不变量
“普通读取(加载)指令”是否指在L中读取L的指令
对
这种方法如何比第一种更好
通过“普通读取”指令检查L
是否为0比使用test\u和\u set
指令涉及的“多核或多处理器机器上的通信量”更少。因此,当一个磁芯在锁定的锁上旋转时,其他磁芯受影响较小