我正忙着研究n线程互斥的过滤器锁算法,我似乎无法理解代码的第17行。我知道它是在某种条件下旋转的,但并不完全确定这些条件是什么。更具体地说(∃k != me)。
1 class Filter implements Lock {
2 int[] level;
3 int[] victim;
4 public Filter(int n) {
5 level = new int[n];
6 victim = new int[n]; // use 1..n-1
7 for (int i = 0; i < n; i++) {
8 level[i] = 0;
9 }
10 }
11 public void lock() {
12 int me = ThreadID.get();
13 for (int i = 1; i < n; i++) { //attempt level 1
14 level[me] = i;
15 victim[i] = me;
16 // spin while conflicts exist
17 while ((∃k != me) (level[k] >= i && victim[i] == me)) {};
18 }
19 }
20 public void unlock() {
21 int me = ThreadID.get();
22 level[me] = 0;
23 }
24 }发布于 2013-11-11 15:18:41
我的解读
(∃k != me) (level[k] >= i && victim[i] == me)是“存在一些k而不是me这样的level[k] >= i && victim[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;
}
}
}发布于 2015-03-23 09:00:24
它可以写成:
for (int k = 0; k < n; k++) {
while ((k != me) && (level[k] >= i && victim[i] == me)) {
//spin wait
}
}https://stackoverflow.com/questions/19909639
复制相似问题