Operating system 信号量有条件变量吗?

Operating system 信号量有条件变量吗?,operating-system,system,mutex,semaphore,monitors,Operating System,System,Mutex,Semaphore,Monitors,wait和signal条件变量不是用来表示请求和释放吗 声明信号量没有Conditional变量,而监视器有 根据同一网站, 条件变量允许进程在监视器内等待 并允许等待过程在另一个 进程释放资源 这不是信号量中的相同过程吗?这里的区别是信号量是有状态对象,而条件变量是无状态的 其思想是,有时您有一个非常复杂的状态(不能用简单的计数器(如信号量)表示),您希望等待该状态更改。这就是为什么条件变量与互斥体一起使用的原因——互斥体需要保护状态的更改,并允许在不丢失通知的情况下等待更改 在内部,一些信号

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

声明信号量没有Conditional变量,而监视器有

根据同一网站,

条件变量允许进程在监视器内等待 并允许等待过程在另一个 进程释放资源


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

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

其思想是,有时您有一个非常复杂的状态(不能用简单的计数器(如信号量)表示),您希望等待该状态更改。这就是为什么条件变量与互斥体一起使用的原因——互斥体需要保护状态的更改,并允许在不丢失通知的情况下等待更改

在内部,一些信号量实现是基于条件变量的——在本例中,计数器是一个将要更改的受保护状态。但是这种实现并不是很有效,因为现代操作系统有更好的方法来实现信号量


如果您想知道如何实现条件变量和信号量,可以阅读我的答案。

。condvar可以绑定一个互斥锁。一个信号量不能。在典型使用中,绑定互斥节省了内核调用。