C语言 互斥锁内的信号量等待



如果在路径中以某种方式可以保证受信号量保护的资源可用,我可以在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()
}

基本上,您的问题的答案是:是的
。您可以在互斥锁上下文中的信号量上调用"等待"基元

实际上,这是不断做的事情。例如,考虑使用计数信号量实现消息队列 IPC 服务:在调用计数信号量上的"等待"基元之前,您需要锁定保护队列的互斥体。

想想POSIX,如果你必须实现一个邮箱(典型的生产者/消费者的例子(,你可以安全轻松地使用互斥体和条件变量(将用作你的信号量(来完成。你想做的事情并不奇怪,只要你能控制局面。

最新更新