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

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

1. 过滤器锁算法的死锁问题

在并发编程中,过滤器锁算法是一个重要的概念。当存在两个线程 A 和 B 时,若它们卡在某一级别 j,且 victim[j] 字段不变,由于它不能同时等于 A 和 B,所以必然有一个线程能进入级别 j + 1,这就使得卡住的线程数量减少到 k - 1,这与归纳假设相矛盾。由此得出推论:过滤器锁算法是无死锁的。

2. 锁的公平性

无饥饿属性保证了每个调用 lock() 方法的线程最终都能进入临界区,但它并未对所需时间做出保证。理想情况下,如果线程 A 先于线程 B 调用 lock() 方法,那么 A 应该先进入临界区。然而,我们难以直接判断哪个线程先调用了 lock() 方法。因此,我们将 lock() 方法拆分为两个代码部分:
- 门道部分(doorway section) :其执行区间 DA 由有限步骤组成。
- 等待部分(waiting section) :其执行区间 WA 可能需要无限步骤。

门道部分必须在有限步骤内完成,这一要求被称为有界无等待进展属性。公平性的定义如下:若线程 A 在 B 开始门道部分之前完成了自己的门道部分,那么 A 不会被 B 超越。用数学表达式表示为:若 $D_{j}^{A} \to D_{k}^{B}$,则 $CS_{j}^{A} \to CS_{k}^{B}$。

3. Lamport 的面包店算法

面包店锁算法通过模拟面包店的号码分发机来维护先来先服务的属性。每个线程在门道部分获取一个号码,然后等待,直到没有比它号码更小

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值