我已阅读 Stackoverflow 上有关此主题的帖子,但无法理解要点。也许我们可以将它们的差异限制在一个具体的例子中。
有一个带锁的厕所。互斥:一个线程拿钥匙进去。如果有其他线程需要进入厕所,他们等待。当前所有者出来并将钥匙交给守卫(操作系统内核),守卫将厕所的所有权交给另一个人。
问题陈述:我看到所有人都同意共享资源必须由锁定它的线程中的同一个互斥锁解锁。但是对于二进制信号量,它也可以在任何其他线程中解锁。现在请考虑信号量的实现。
第一个人到达厕所,执行wait语句,信号量结构的值从1变为0。现在如果有其他人(其他线程)来执行wait语句,它将阻塞,因为'value = 0' . 那么为什么总是说任何其他线程都可以在没有其他线程进入临界区时专门解锁厕所/临界区?