【问题标题】:Does this uphold Mutual Exclusion: Concurrent programming?这是否支持互斥:并发编程?
【发布时间】:2016-10-15 14:57:29
【问题描述】:

1/ 算法是否支持互斥?

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

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

谢谢

【问题讨论】:

  • 不要发布带有文字的图片。图像中的文字难以阅读(如果您是盲人则无法阅读)并且无法搜索。将算法的解释直接放在您的问题中。
  • 好的,谢谢您的建议。

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


【解决方案1】:

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

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

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

    2. 查看服务器的代码,直到Q3失败,也就是直到respond == 0,才能再次到达Q2。查看客户端的代码,只有当 i 将临界区留在C3 时才会发生这种情况。

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

  2. 该算法并非免于饥饿。客户端 j 可能会被一些客户端 i 无限制地不合时宜地绕过。算法没有死锁:只有一个临界区,如果任何进入它的线程最终会退出它,那么它最终将可供另一个线程使用(尽管可能是同一个)。

【讨论】:

  • 谢谢。很好的解释!
猜你喜欢
  • 2017-06-26
  • 2011-06-13
  • 2018-09-07
  • 2021-09-14
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多