【发布时间】:2013-04-11 14:02:53
【问题描述】:
我正在尝试检查这个互斥体解决方案的正确性,并且需要检查互斥、活性和公平性是否都满足。 L1 和 L2 是任意代码行。有 2 个进程同时运行。下面是进程i的代码,j的代码是对称的。
bool waiting[i] = false;
bool waiting[j] = false;
bool busy = false;
cobegin(process i)
L1: Si(1)
L2: Si(2)
waiting[i] = true;
L3: while (waiting[i] and TST(busy));
L4: [ Critical Section ]
L5: waiting[i] = false;
L6: busy = false;
L7: while(waiting[j];
L8: Go to L2
我知道所有三个属性都满意,但我只需要确保我没有遗漏任何东西。你能找到不满意的房产吗?
【问题讨论】:
-
这看起来类似于Peterson's algorithm。你实际上可能simulate things like this。
-
这很聪明,谢谢!
-
乍一看,即使我认为它与彼得森的算法很接近,但后来注意到它只是一个基于硬件的解决方案,仅依赖于 test_and_set。
标签: concurrency operating-system mutual-exclusion