并发编程中的锁算法与时间戳系统解析
1. 锁算法的公平性与相关概念
在并发编程里,锁算法的公平性是一个关键问题。饥饿自由特性保证了每个调用 lock() 方法的线程最终都能进入临界区,但它并未对所需时间作出保证。理想情况下,如果线程 A 先于线程 B 调用 lock() 方法,那么 A 应该先进入临界区。然而,依据现有的工具,我们难以判断哪个线程最先调用 lock() 方法。
为了解决这个问题,我们把 lock() 方法拆分成两个代码部分以及对应的执行区间:
- 门道部分(doorway section) :其执行区间 DA 由有限数量的步骤构成,这部分需满足有界无等待进展属性,也就是必须在有限步骤内完成。
- 等待部分(waiting section) :其执行区间 WA 可能需要无限数量的步骤。
公平性的定义如下:
若线程 A 完成门道部分的时间早于线程 B 开始门道部分的时间,即 DjA → DkB ,那么 A 不会被 B 超越,也就是 CSjA → CSkB 。
2. Lamport 的面包店算法
面包店锁算法模拟了面包店常用的号码分发机,以此维持先来先服务的特性。每个线程在门道部分获取一个号码,接着等待,直到没有号码比它早的线程尝试进入临界区。
以下是面包店锁算法的
超级会员免费看
订阅专栏 解锁全文
170万+

被折叠的 条评论
为什么被折叠?



