Mutex 与 Semaphore 都是用在保护 critical section,确保多个 process 平行运作并存取资源时,执行结果不会因为执行程序的时间先后的影响而导致错误。
Mutex 与 Semaphore 要解决的是不同的问题。了解这个部分后,就可以来区分 mutex 与 binary semaphore。mutex 确保数个 process 在一个时间点上,只能有一个 process 存取单项资源,而 semaphore 则是让数个 producer 与 数个 consumer 在讯号上进行合作。
注:Mutex与Semaphore在很多书、文章中都有很多不同的解释。我认为这篇文章谈的是最严格定义的 Semaphore (Dijkstra 所提出),因此两者有相当不同的区分。而后衍生出的 semaphore ,则包含了 counting semaphore 与 binary semaphore,也才能够用于保护资源,或是处理 multiple identical resources 的问题。