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