我是否可以在mutex_lock中调用semaphore.wait()
,如果在路径中可以保证信号量保护的资源可用?
即。我想做以下事情:
void some_function {
mutex_lock()
// Do something
if (certain_conditions == TRUE) {
semaphore_wait() // Guaranteed that resource is available.
// Can not get blocked for sure.
}
// Do some more things
mutex_unlock()
}
答案 0 :(得分:1)
基本上,您的问题的答案是:是的。您可以在Mutex锁定上下文中调用信号量上的“wait”原语。
实际上,这是不断完成的事情。例如,可以考虑使用Counting Semaphores实现Message Queue IPC服务:在调用Counting Semaphore上的“wait”原语之前,需要锁定保护队列的Mutex。
考虑POSIX,如果必须实现邮箱(典型的生产者/消费者示例),您可以使用互斥和条件变量(将用作您的信号量)安全轻松地完成它。只要你能控制局面,你想做的事就不奇怪了。