如果在将信号量的值从1递减到0之后进程发生故障,根据我的理解,信号量的值仍为0.
如果再次出现相同的进程并尝试重新获取相同的信号量,它将永远阻止。
如果我的进程异常停止,有没有办法在递减后将信号量值重置为1?
答案 0 :(得分:1)
我假设您使用标准的semctl()/ semop()API作为信号量。
有一个名为SEM_UNDO的标志可以告诉内核在进程终止时重置信号量的值。您需要在semop()调用中使用它。
此处提供更多信息:http://beej.us/guide/bgipc/output/html/multipage/semaphores.html