C posix信号量的Sys V SEM_UNDO等价物

C posix信号量的Sys V SEM_UNDO等价物,c,posix,standards,semaphore,sysv-ipc,C,Posix,Standards,Semaphore,Sysv Ipc,在具有多个进程的Linux系统中,SystemV信号量允许一个SEM_UNDO选项,以防止在持有信号量的进程崩溃时信号量被“卡住”。防止POSIX信号量因持有信号量的进程崩溃而阻塞的正确方法是什么?或者POSIX是否保证在发生崩溃时释放信号量?您可以使用SIGSEGV的信号处理程序,然后解锁并移除信号处理程序 // set handler signal(SIGSEGV, handler); void handler(int signum) { // unlock the locked sema

在具有多个进程的Linux系统中,SystemV信号量允许一个SEM_UNDO选项,以防止在持有信号量的进程崩溃时信号量被“卡住”。防止POSIX信号量因持有信号量的进程崩溃而阻塞的正确方法是什么?或者POSIX是否保证在发生崩溃时释放信号量?

您可以使用SIGSEGV的信号处理程序,然后解锁并移除信号处理程序

// set handler
signal(SIGSEGV, handler);

void handler(int signum) {
// unlock the locked semaphores
signal(SIGSEGV, SIG_DFL);
}

答案是肯定的还是否定的。我希望POSIX信号量上有权威的消息来源,因为崩溃而使事情处于不确定的状态。该链接当然提供了一种处理这种情况的方法,但没有解释POSIX规范中似乎存在疏忽的原因/方式。我最后只使用了SYS V信号量,但我很想知道为什么POSIX不强制要求互斥在崩溃时采取看起来唯一明智的行为。嗯:-也使用文件锁定解决方案。在回答以下问题时讨论了这个主题:但不能保证哪个线程捕获SEGV。所以不能保证你会在拥有锁的线程中。我猜信号量没有所有权的概念,互斥体有。