我指的是这个过滤算法说明: this article
它说,它提供了微弱的公平性,一些线程可以被取代任意次数。 (幻灯片98)
我无法理解这一部分,因为最后一个写入受害者值必须等待并且已经等待的线程移动到下一级别,那么如何在这里超越一个线程?。
答案 0 :(得分:0)
让我们考虑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。