Concurrency 互斥滤波算法:弱公平性

Concurrency 互斥滤波算法:弱公平性,concurrency,mutual-exclusion,Concurrency,Mutual Exclusion,我指的是这个过滤算法注释: 它说,它提供了弱的公平性,一些线程可以被任意次数地超越。(幻灯片98) 我无法理解这一部分,因为最后一个写受害者值必须等待,并且已经等待线程移动到下一级,所以这里怎么能超过一个线程?让我们使用过滤器锁考虑4个线程(T0,T1,T2和T3)来获得互斥。 我们假设t0卡在0级,t1卡在1级,依此类推。因此,t3进入其临界段,然后解锁锁。注意:t0至t2在中卡住((∃k!=i)级别[k]>=L)&受害者[L]==i{}实际上是几行代码(请参阅)。从现在起,我将把这段代码称

我指的是这个过滤算法注释:

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

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

让我们使用过滤器锁考虑4个线程(T0,T1,T2和T3)来获得互斥。 我们假设t0卡在0级,t1卡在1级,依此类推。因此,t3进入其临界段,然后解锁锁。注意:t0至t2在<代码>中卡住((∃k!=i)级别[k]>=L)&受害者[L]==i{}实际上是几行代码(请参阅)。从现在起,我将把这段代码称为(C1)。现在t2继续进入临界段,解锁,然后是t1。这意味着t0可以离开0级(C1)。。。然而,这并不意味着它不能被超越!到目前为止,t3、t2和t1可能希望再次获得锁。因此,三个线程中的一个被过滤掉并停留在0级(C1),因为一个线程是“受害者”,比如t1。虽然t0满足了离开(C1)的所有要求,但它仍可能处于(C1)的for循环中,因为它可能由于各种架构原因而“运行较慢”。这允许T2和T3超过T0。

让我们考虑4个线程(T0,T1,T2和T3),使用过滤器锁得到互斥。< /P> 我们假设t0卡在0级,t1卡在1级,依此类推。因此,t3进入其临界段,然后解锁锁。注意:t0至t2在<代码>中卡住((∃k!=i)级别[k]>=L)&受害者[L]==i{}实际上是几行代码(请参阅)。从现在起,我将把这段代码称为(C1)。现在t2继续进入临界段,解锁,然后是t1。这意味着t0可以离开0级(C1)。。。然而,这并不意味着它不能被超越!到目前为止,t3、t2和t1可能希望再次获得锁。因此,三个线程中的一个被过滤掉并停留在0级(C1),因为一个线程是“受害者”,比如t1。虽然t0满足了离开(C1)的所有要求,但它仍可能处于(C1)的for循环中,因为它可能由于各种架构原因而“运行较慢”。这允许t2和t3超越t0