信号量有条件变量吗?

Do semaphores have conditional variables?

wait 和 signal 条件变量不是表示请求和释放吗?

This link 声明信号量没有条件变量,而监视器有。

根据同一网站,

The conditional variable allows a process to wait inside the monitor and allows a waiting process to resume immediately when the other process releases the resources.

这不是信号量中的相同过程吗?

这里的区别是信号量是有状态的对象,而条件变量是无状态的。

想法是,有时您有一个非常复杂的状态(不能用信号量等简单计数器表示)并且您想等待该状态发生变化。这就是条件变量与互斥锁一起使用的原因 - 需要互斥锁来保护该状态的更改并允许等待更改而不会丢失通知。

在内部,一些信号量实现是基于条件变量的——在这种情况下,计数器是一个将要改变的受保护状态。但是这样的实现不是很有效,因为现代 OS 有更好的方法来实现信号量。

如果你想知道条件变量和信号量是如何实现的,你可以看我的回答here