关于Posix和System V的信号量测试发现的区别

Posix信号量和System V信号量都是随内核持久性的,Posix是通过文件而System V是通过Key值对信号量进行区分。这些基本的特点就不多说了。最近测试信号量时发现,Posix信号量在程序挂掉之后,会保留程序挂掉之前的信号量值,但是System V的信号量在程序挂掉后会将之前申请的信号量释放。既返回到初始化时的状态。

举一个例子,如果我用Posix创建了一个信号量,值为1,然后sem_wait,在sem_post之前程序挂掉了,那么这时候信号量就变为0了,而且如果之后有进程申请这个信号量就申请不到了。       但是如果用System V的信号量集,创建一个信号量集,并给第一个信号量的值设置为1,这时候有一个进程申请该信号量,在释放之前该进程挂掉了,这时候信号量会返回到这个进程申请之前,所以当有别的进程申请信号量时,是可以继续申请成功的。

猜你喜欢

转载自blog.csdn.net/qu1993/article/details/82351904