【发布时间】:2017-02-28 18:47:25
【问题描述】:
-
拿这个伪代码,
Semaphore S <- 0 non-critical section wait(S) critical section signal(S)
这个临界区问题的解决方案是否只支持互斥?
我知道由于永远不会到达临界区,因此无法摆脱死锁,但这是否也意味着它不支持互斥。
【问题讨论】:
标签: deadlock semaphore critical-section mutual-exclusion
拿这个伪代码,
Semaphore S <- 0
non-critical section
wait(S)
critical section
signal(S)
这个临界区问题的解决方案是否只支持互斥?
我知道由于永远不会到达临界区,因此无法摆脱死锁,但这是否也意味着它不支持互斥。
【问题讨论】:
标签: deadlock semaphore critical-section mutual-exclusion
互斥意味着只有1个thread(or process)可以进入Critical Section。所以根据定义,代码不违反mutual exclusion。
这里要注意的重要一点是,所有threads,都会处于busy-waiting状态,根本没有progress,但实际上并没有死锁,因为这4个必须之一死锁的发生条件是CIRCULAR WAIT。但在这种情况下,并不是线程在相互等待。
【讨论】: