5、并发编程中的锁算法与时间戳系统解析

并发编程中的锁算法与时间戳系统解析

1. 锁算法的公平性与相关概念

在并发编程里,锁算法的公平性是一个关键问题。饥饿自由特性保证了每个调用 lock() 方法的线程最终都能进入临界区,但它并未对所需时间作出保证。理想情况下,如果线程 A 先于线程 B 调用 lock() 方法,那么 A 应该先进入临界区。然而,依据现有的工具,我们难以判断哪个线程最先调用 lock() 方法。

为了解决这个问题,我们把 lock() 方法拆分成两个代码部分以及对应的执行区间:
- 门道部分(doorway section) :其执行区间 DA 由有限数量的步骤构成,这部分需满足有界无等待进展属性,也就是必须在有限步骤内完成。
- 等待部分(waiting section) :其执行区间 WA 可能需要无限数量的步骤。

公平性的定义如下:
若线程 A 完成门道部分的时间早于线程 B 开始门道部分的时间,即 DjA → DkB ,那么 A 不会被 B 超越,也就是 CSjA → CSkB

2. Lamport 的面包店算法

面包店锁算法模拟了面包店常用的号码分发机,以此维持先来先服务的特性。每个线程在门道部分获取一个号码,接着等待,直到没有号码比它早的线程尝试进入临界区。

以下是面包店锁算法的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值