并发编程中的锁算法与时间戳系统解析
在并发编程领域,锁算法和时间戳系统是实现线程同步和互斥的重要工具。本文将深入探讨几种经典的锁算法,包括Lamport的面包店算法,以及相关的时间戳系统,分析它们的原理、特性和局限性。
1. 过滤器锁算法的死锁特性
过滤器锁算法具有死锁-free的特性。在该算法中,若有两个线程A和B,只要A读取到 victim[j] = A ,它就会被阻塞;同理,B读取到 victim[j] = B 时也会被阻塞。但 victim 字段是固定的,不可能同时等于A和B,所以必然有一个线程能进入 j + 1 级别,从而使阻塞线程数量减少到 k - 1 ,这与归纳假设矛盾,因此过滤器锁算法是死锁-free的。
2. 锁算法的公平性
锁算法的饥饿-free特性保证了每个调用 lock() 方法的线程最终都能进入临界区,但它并未对进入的时间做出保证。为了实现更公平的调度,我们将 lock() 方法分为两个部分:
- 门道部分 :执行区间 DA 由有限个步骤组成,要求该部分必须在有限步骤内完成,这一要求被称为有界无等待进展属性。
- 等待部分 :执行区间 WA 可能需要无限个步骤。
公平性的定义为:若线程A在门道部分完成的时间早于线程B开始门道部分的时间,那么A不会被B超
超级会员免费看
订阅专栏 解锁全文
170万+

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



