我认为r-bound等待意味着k-bound等待所有k> r。那么这个问题是没有意义的,因为彼得森应该满足r有界等待所有r。
问题是要求对Peterson算法进行“简化”,因为它要求放宽约束条件?
我有这样的代码:
1 class Peterson implements Lock {
2 // thread-local index, 0 or 1
3 private volatile boolean[] flag = new boolean[2];
4 private volatile int victim;
5 public void lock() {
6 int i = ThreadID.get();
7 int j = 1 - i;
8 flag[i] = true; // I’m interested
9 victim = i; // you go first
10 while (flag[j] && victim == i) {}; // wait
11 }
12 public void unlock() {
13 int i = ThreadID.get();
14 flag[i] = false; // I’m not interested
15 }
16 }
发布于 2018-05-18 21:39:47
让我们假设D 0 j?D 1 k,并且两个线程都位于其相应的等待部分中。在这种情况下,flag[0]==true
,flag[1]==true
,和victim==1
; 因此,线程0可能会退出其等待部分,而线程1可能不会。
https://stackoverflow.com/questions/-100008538
复制相似问题