3

我正在使用named semaphoreinCLinux控制跨多个进程的共享内存的访问。到目前为止,我还没有向信号量添加任何sem_close代码sem_unlink。所以我的问题是:

当使用它的所有进程完成时,命名信号量是否会自动销毁?

如果是的话,可以不打电话sem_closesem_unlink

4

2 回答 2

4

http://linux.die.net/man/7/sem_overview

“POSIX 命名信号量具有内核持久性:如果不被 sem_unlink(3) 删除,信号量将一直存在,直到系统关闭。”

于 2013-06-12T10:50:57.097 回答
1

从手册页http://pubs.opengroup.org/onlinepubs/7908799/xsh/sem_close.html

sem_close() 函数用于指示调用进程已使用 sem 指示的命名信号量完成。为未命名的信号量(由 sem_init() 创建的信号量)调用 sem_close() 的效果是未定义的。sem_close() 函数取消分配(即,使该进程可用于后续的 sem_open() 重用)系统分配给该进程用于该信号量的任何系统资源。此进程后续使用 sem 指示的信号量的效果是不确定的。如果信号量没有被成功调用 sem_unlink() 删除,那么 sem_close() 对信号量的状态没有影响。

If the sem_unlink() function has been successfully invoked for name after the most recent call to sem_open() with O_CREAT for this semaphore, then when all processes that have opened the semaphore close it, the semaphore is no longer be accessible.

所以本质上,当所有打开信号量的进程都成功调用了 sem_unlink 和 sem_close 时,信号量就被销毁了。

于 2013-06-12T10:51:18.413 回答