信号量在互斥锁内等待

时间:2018-06-12 21:46:27

标签: c linux algorithm linux-kernel operating-system

我是否可以在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()

}

1 个答案:

答案 0 :(得分:1)

基本上,您的问题的答案是:是的。您可以在Mutex锁定上下文中调用信号量上的“wait”原语

实际上,这是不断完成的事情。例如,可以考虑使用Counting Semaphores实现Message Queue IPC服务:在调用Counting Semaphore上的“wait”原语之前,需要锁定保护队列的Mutex。

考虑POSIX,如果必须实现邮箱(典型的生产者/消费者示例),您可以使用互斥和条件变量(将用作您的信号量)安全轻松地完成它。只要你能控制局面,你想做的事就不奇怪了。