【问题标题】:Filter algorithm for mutual exclusion: Weak fairness互斥过滤算法:弱公平
【发布时间】:2015-09-25 21:45:31
【问题描述】:
【问题讨论】:
标签:
concurrency
mutual-exclusion
【解决方案1】:
让我们考虑 4 个线程(t0、t1、t2 和 t3)使用过滤器锁来获得互斥。
我们假设 t0 卡在级别 0,t1 卡在级别 1 等等。因此 t3 进入其临界区并随后解锁。注意:t0 到 t2 卡在 while((∃k != i) level[k] >= L) && victim[L] == i) {}; 中,这实际上是几行代码(参见 Filter Lock Algorithm)。从现在开始,我将这段代码称为(C1)。现在 t2 继续进入临界区并解锁,然后是 t1。这意味着 t0 可以离开 0 级(C1)......但这并不意味着它不能被超越!很可能现在 t3、t2 和 t1 想要再次获取锁。因此,三个线程之一被过滤掉并停留在级别 0(C1)中,因为一个线程是“受害者”,比如说 t1。虽然 t0 满足离开 (C1) 的所有要求,但它仍可能处于 (C1) 的 for 循环中,因为由于各种架构原因它可能“运行得更慢”。这允许 t2 和 t3 超过 t0。