Java 滤波器锁定算法

Java 滤波器锁定算法,java,algorithm,concurrency,locking,Java,Algorithm,Concurrency,Locking,我正忙着研究用于n线程互斥的过滤器锁定算法,但我似乎无法理解代码的第17行。我知道它是在一个条件下旋转的,但不完全确定这些条件是什么。更具体地说是什么(∃k!=我)包含 1类过滤器实现锁定{ 2国际[]级; 3.被害人; 4公共过滤器(int n){ 5级=新整数[n]; 6受害者=新整数[n];//使用1..n-1 7表示(int i=0;i=i和&被害人[i]==me” 循环旋转,直到没有条件保持的k 下面是另一种陈述同样事情的方式: boolean conflicts_exist = tr

我正忙着研究用于n线程互斥的过滤器锁定算法,但我似乎无法理解代码的第17行。我知道它是在一个条件下旋转的,但不完全确定这些条件是什么。更具体地说是什么(∃k!=我)包含

1类过滤器实现锁定{
2国际[]级;
3.被害人;
4公共过滤器(int n){
5级=新整数[n];
6受害者=新整数[n];//使用1..n-1
7表示(int i=0;i=i和受害者[i]==me)){};
18     }
19 }
20公开作废解锁(){
21 int me=ThreadID.get();
22级[me]=0;
23 }
24 }
我对

(∃k != me) (level[k] >= i && victim[i] == me)
是“存在一些
k
,而不是
me
,这样
level[k]>=i和&被害人[i]==me

循环旋转,直到没有条件保持的
k

下面是另一种陈述同样事情的方式:

boolean conflicts_exist = true;
while (conflicts_exist) {
   conflicts_exist = false;
   for (int k = 1; k < n; k++) {
      if (k != me && level[k] >= i && victim[i] == me) {
         conflicts_exist = true;
         break;
      }
   }
}
boolean冲突\u exist=true;
虽然(存在冲突){
冲突存在=错误;
对于(int k=1;k=i&&被害人[i]==me){
冲突存在=正确;
打破
}
}
}
它可以写成:

for (int k = 0; k < n; k++) {
      while ((k != me) && (level[k] >= i && victim[i] == me)) {
           //spin wait
      }
}
for(int k=0;k=i&&被害人[i]==me)){
//旋转等待
}
}

我只是不确定k是从哪里来的,或者更确切地说是从哪里来的defined@Crossman:您可以将其视为第二级循环,
k
是循环变量。请参阅我的编辑。希望这能让事情更清楚。显然,你的算法有错误
k
应该从
0
开始,而不是
1
。否则,若有两个线程,那个么线程2将永远不会知道线程1已经准备好锁定。
for (int k = 0; k < n; k++) {
      while ((k != me) && (level[k] >= i && victim[i] == me)) {
           //spin wait
      }
}