带有信号灯的临界区

Critical section with sephamores

  1. 拿这个伪代码,

    Semaphore S <- 0 
    non-critical section 
    wait(S)
    critical section 
    signal(S)
    

这个临界区问题的解决方案是否只支持互斥?

我知道没有死锁的自由,因为永远不会到达临界区,但这是否也意味着它不支持互斥。

互斥意味着只有1个thread(or process)可以进入Critical Section。所以根据定义,代码不违反 mutual exclusion.

这里需要注意的是,所有的threads,都会处于busy-waiting状态,根本就没有progress,但实际上并没有死锁,因为死锁的 4 个必须发生的条件之一是 CIRCULAR WAIT。但在这种情况下并不是线程在互相等待。