如果'没有对信号量的开放引用'(*)
,则删除信号量名称同一段继续详细阐述'如果没有对信号量的开放引用,那么它就会被销毁。否则,销毁将推迟到最后一个打开的参考被关闭“。 这对我来说意味着OS将继续查询这些引用,直到它能够破坏信号量。 这些“参考”比信号量的价值更多吗?
(*)W.R。 Stevens,S.A。Rago'在UNIX环境中的高级编程',第3版,第581.
答案 0 :(得分:0)
命名信号量由
/somename
形式的名称标识;那 是一个以null结尾的字符串,最多为 NAME_MAX -4(即251) 由初始斜杠组成的字符,后跟一个或多个 字符,没有一个是斜杠。两个进程可以运行 通过将相同的名称传递给sem_open(3)
来获得相同的名称信号量。
这基本上意味着创建( O_CREAT 标志传递给sem_open(3)
)一个命名信号量(以/somename
形式)的进程将允许另一个进程可以运行命名信号量是否具有足够的权限(基于创建该信号量的进程uid
/ gid
以及传递给mode
的{{1}})。
这是一种简单的方法(类似于打开同一文件的两个进程),以在两个或多个不同进程上识别[并操作]相同的信号。
否(至少以POSIX方式)。
虽然这是特定于实现的,但是操作系统不需要继续查询信号量以确定它是否可以取消链接。将其视为一个简单的参考计数器:如果sem_open(3)
调用sem_unlink()
,但Process#3
和Process#2
仍在使用该信号量,则它的参考计数器将为2这点。您只需要在每次Process#1
或sem_close()
调用时评估引用计数器值,以确定它何时达到0,然后有效地取消链接命名的信号量。