C:sem_打开标签
我试图学习如何使用信号量,但我对它们的一般用法有点困惑。我在试着理解一个例子 以下是第一个进程中信号量的初始化:C:sem_打开标签,c,header-files,semaphore,C,Header Files,Semaphore,我试图学习如何使用信号量,但我对它们的一般用法有点困惑。我在试着理解一个例子 以下是第一个进程中信号量的初始化: sem_t *s1 = sem_open(SEM_1, O_CREAT | O_EXCL, 0600, 1); sem_t *s1 = sem_open(SEM_1, 0); 其中,SEM_1是预定义的名称 我的问题从O|u create | O|u EXCL部分开始。我知道您在创建信号量时正在设置O_uu标志O_create应该创建一个信号量O_EXCL应使调用失败。我不确定的
sem_t *s1 = sem_open(SEM_1, O_CREAT | O_EXCL, 0600, 1);
sem_t *s1 = sem_open(SEM_1, 0);
其中,SEM_1是预定义的名称
我的问题从O|u create | O|u EXCL
部分开始。我知道您在创建信号量时正在设置O_uu标志O_create
应该创建一个信号量<如果已创建调用,则code>O_EXCL应使调用失败。我不确定的是它是如何在这里指定的。sem_open的手册页上写着:
“如果oflag中同时指定了O_CREAT和O_EXCL,
如果给定名称的信号量已经存在,则返回一个错误
存在。”
如果我理解正确的话,O|u CREAT | O_EXCL
只是指定了这两者(按位或链接),对吗?那么,仅仅是O_EXCL的目的是什么呢
继续,我知道0600是权限,1是信号量值。然后在下一个过程中出现信号量:
sem_t *s1 = sem_open(SEM_1, O_CREAT | O_EXCL, 0600, 1);
sem_t *s1 = sem_open(SEM_1, 0);
在fcntl.h中查找0的定义会显示
#define O_RDONLY 00000000
#define O_RDONLY 00000000
我想这里用的是。但是,既然我最终需要增加/减少信号量的值,那么这不是有点违背了信号量的目的吗
提前感谢您的帮助
如果我理解正确的话,O|u CREAT | O_EXCL
只是
指定两者(按位或链接),对吗
对
那么,仅仅是O_EXCL的目的是什么呢
仅指定O_exc
,即。E调用sem\u open(sem\u 1,O\u EXCL)
,没有定义,也没有意义
然后在下一个过程中出现信号量:
sem_t *s1 = sem_open(SEM_1, O_CREAT | O_EXCL, 0600, 1);
sem_t *s1 = sem_open(SEM_1, 0);
sem_t *s1 = sem_open(SEM_1, 0);
在fcntl.h中查找0的定义会显示
#define O_RDONLY 00000000
#define O_RDONLY 00000000
我想这里用的是
你不应该做出毫无根据的假设。在sem_open
手册中定义了lag参数的含义,这是完全正确的。除了O_create
和O_EXCL
之外,没有其他标志-0
只意味着没有给出这些标志