0

我正在尝试检查这个互斥体解决方案的正确性,并且需要检查互斥、活性和公平性是否都得到满足。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

我得到所有三个属性都满意,但我只需要确保我没有错过任何东西。你能找到不满意的房产吗?

4

1 回答 1

1

在 L3 行,waiting[i]将始终为 true,因为您刚刚在上一行将其更改为 true。我认为这是不可分割TST的指令的硬件实现。test_and_set在这种情况下,您可以使用while ( TST ( busy ) );并且解决方案是正确的。这waiting面旗帜似乎没有任何用途。

于 2013-04-11T14:15:13.887 回答