当前位置: 技术问答>linux和unix
关于信号量ID的疑问
来源: 互联网 发布时间:2016-09-10
本文导语: 如果一个进程创建一个信号量,然后另一个进程用相同的key获取这个信号量,然后用来同步 这两个进程使用这个信号量的时候获得的semid是一样的吗? 如果是一样的,那为什么我每次重新运行程序用同样的key创建id ...
如果一个进程创建一个信号量,然后另一个进程用相同的key获取这个信号量,然后用来同步
这两个进程使用这个信号量的时候获得的semid是一样的吗?
如果是一样的,那为什么我每次重新运行程序用同样的key创建id ,和之前创建的id不一样呢
如果不一样,用ipcs看信号量时,只有一个ID啊,
或者可以这么理解:如果这个信号量有一人在用,我在获得的话,是相同的?如果没人在用我在创建的话 就会和以前的不一样
不知道我描述明白没。。。。
这两个进程使用这个信号量的时候获得的semid是一样的吗?
如果是一样的,那为什么我每次重新运行程序用同样的key创建id ,和之前创建的id不一样呢
如果不一样,用ipcs看信号量时,只有一个ID啊,
或者可以这么理解:如果这个信号量有一人在用,我在获得的话,是相同的?如果没人在用我在创建的话 就会和以前的不一样
不知道我描述明白没。。。。
|
取决于key, 如果有对应的信号量的key符合,就返回此id, 否则创建新的信号量并分配一个新的id.
这个id是系统内唯一的。
这个id是系统内唯一的。
|
The semget() system call returns the semaphore set identifier associ‐
ated with the argument key. A new set of nsems semaphores is created
if key has the value IPC_PRIVATE or if no existing semaphore set is
associated with key and IPC_CREAT is specified in semflg.
string 到 id 的映射,不是简单的字符串运算,
以IPC_PRIVATE方式打开string对应的信号量时,会创建新的信号量,
当string对应的信号量不存在,并且以IPC_CREAT标志打开时,也会创建新的信号量.
如果以非IPC_PRIVATE方式打开string对应的信号量,
内核会先查找string对应的信号量是否存在,如果已经存在,就直接返回.
如果不存在,就分配一个新的信号量返回.
所以创建新的信号量时,即使string相同,返回的信号量也不一定跟以前一样.