【问题标题】:Filter algorithm for mutual exclusion: Weak fairness互斥过滤算法:弱公平
【发布时间】:2015-09-25 21:45:31
【问题描述】:

我指的是这个过滤算法注释: http://cs.nyu.edu/wies/teaching/ppc-14/material/lecture02.pdf

它说,它提供了较弱的公平性,并且某些线程可以被任意次数超越。 (幻灯片 98)

我无法理解这部分,因为最后一个写入受害者值的线程必须等待,并且已经等待的线程移动到下一个级别,那么这里怎么可能超过一个线程呢?

【问题讨论】:

    标签: 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 2012-12-17
      相关资源
      最近更新 更多