- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有点难以理解 peterson 的算法:该算法说:
flag[i] = true;
turn = j;
while (flag[j] && turn == j);
// critical section
...
// end of critical section
flag[i] = false;
现在让我们先假设标志[0]=标志[1]=真
如果 P1 开始执行,它将忙于等待 while 循环,因为 flag[0] 和 turn==0 都为真。现在如果P0不想执行,P1永远不会执行临界区。
请澄清我的疑问,我的理解可能存在差距。
谢谢
最佳答案
Now lets suppose initially flag[0]=flag[1]=true
Now if P0 does not want to execute, P1 will never execute the critical section.
两个标志都应初始化为 false
。将两者都设置为 true
的唯一方法是两个进程都想执行或当前正在执行临界区。因此,如果 P1 正在等待执行,则 flag[0]
为 true
,因此 P0 必须即将执行临界区,或者正在执行临界区,之后其中 flag[0]
将被设置为 false
并且 P1 可以进入临界区。此外,如果 P1 正在等待执行,则 P0 不能同时等待执行,因为等待条件是互斥的(因为 turn
要么是 0 要么是 1,并且不能同时为两者)。
将两个标志初始化为 true
会导致您所描述的死锁。这样做是没有意义的,因为标志的含义是表明进程要进入临界区,所以如果不是这样,为什么要设置那个值?
关于algorithm - 难以理解彼得森的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37428435/
我想模拟这个函数: function getMetaData(key) { var deferred = $q.defer(); var s3 = vm.ini
我是一名优秀的程序员,十分优秀!