信号量有条件变量吗?
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。
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。