这是否支持相互排斥:并发编程?

时间:2016-10-15 14:57:30

标签: algorithm concurrency deadlock concurrent-programming mutual-exclusion

1 /算法是否支持互斥?

2 /算法是否没有死锁并且可能存在饥饿?

我似乎无法解决僵局。我相信没有任何互斥,因为任何客户都可以进入关键部分?

由于

1 个答案:

答案 0 :(得分:0)

这是一种算法,客户端请求服务器授予的“锁定”。

  1. 这确实是一种互斥算法。相反,假设两个客户端 i j C2C3之间。 W.l.o.g,说 i 是第一个进入临界区的人。

    1. i 这样做时,respond = i必须C1为真。这必须发生在服务器的Q2

    2. 查看服务器的代码,在Q2失败之前,它无法再次到达Q3,即直到respond == 0。查看客户端的代码,只有在 i 离开临界区C3时才会发生这种情况。

    3. 这与 j 同时处于关键部分相矛盾 - Q2只能在 i 离开临界区时再次到达,因此,之前那, j 不可能通过C1

  2. 该算法 没有饥饿。客户端 j 可以被一些客户端 i 无限制地绕过。算法 没有死锁:只有一个关键部分,如果任何进入它的线程最终将退出它,那么它最终将可用于另一个线程(尽管可能是同一个线程)。