我被问到以下问题而且我不确定它的正确答案是什么:
If monitors are implemented by replacing condition variables with semaphores
(counters set to 0) with down() and up() as wait and signal, respectively,
would the monitors work correctly?
我很想说这是一个正确的实现,因为信号量和条件变量可以互相替换,对吗?有更好的解释吗?
答案 0 :(得分:2)
您询问初始化为1的信号量,也称为二进制信号量。
答案取决于这些原语的特定实现(或定义),但典型的区别是监视器具有线程所有权而信号量不具有。这会影响各种情况。
A
在内部调用公共方法B
。然后递归监视器将正确地允许调用方法A
(其涉及序列锁定 - 锁定 - 解锁 - 解锁),而与信号量实现的监视器相同将在第二次尝试锁定时导致死锁,使用同一个帖子。因此,二进制信号量与监视器类似,但不要指望它的行为相同。