1 /算法是否支持互斥?
2 /算法是否没有死锁并且可能存在饥饿?
我似乎无法解决僵局。我相信没有任何互斥,因为任何客户都可以进入关键部分?
由于
答案 0 :(得分:0)
这是一种算法,客户端请求服务器授予的“锁定”。
这确实是一种互斥算法。相反,假设两个客户端 i 和 j 在C2
和C3
之间。 W.l.o.g,说 i 是第一个进入临界区的人。
当 i 这样做时,respond = i
必须C1
为真。这必须发生在服务器的Q2
。
查看服务器的代码,在Q2
失败之前,它无法再次到达Q3
,即直到respond == 0
。查看客户端的代码,只有在 i 离开临界区C3
时才会发生这种情况。
这与 j 同时处于关键部分相矛盾 - Q2
只能在 i 离开临界区时再次到达,因此,之前那, j 不可能通过C1
。
该算法 没有饥饿。客户端 j 可以被一些客户端 i 无限制地绕过。算法 没有死锁:只有一个关键部分,如果任何进入它的线程最终将退出它,那么它最终将可用于另一个线程(尽管可能是同一个线程)。