首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >滤波锁算法

滤波锁算法
EN

Stack Overflow用户
提问于 2013-11-11 15:13:30
回答 2查看 6.1K关注 0票数 9

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

代码语言:javascript
复制
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 }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-11 15:18:41

我的解读

代码语言:javascript
复制
(∃k != me) (level[k] >= i && victim[i] == me)

是“存在一些k而不是me这样的level[k] >= i && victim[i] == me”。

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

这里还有另一种方法来说明同样的事情:

代码语言:javascript
复制
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;
      }
   }
}
票数 10
EN

Stack Overflow用户

发布于 2015-03-23 09:00:24

它可以写成:

代码语言:javascript
复制
for (int k = 0; k < n; k++) {
      while ((k != me) && (level[k] >= i && victim[i] == me)) {
           //spin wait
      }
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19909639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档