1

为什么我不能为其信号量集打开带有 4 个信号量的 semget?IE。:

semget(key_t key, int nsems, int semflg); 

使用 nsms 作为 3 调用上述函数很好,但是使用 4 它返回负 1..

int sempahore = semget((key_t)key,4,IPC_CREAT | MY_PERMS);

上面的代码仅在我将 4 更改为 3 时才有效

其他明智的 errno 返回无效参数

4

1 回答 1

3

根据我的 Linux 机器上的手册页,如果“nsems 小于 0 或大于每个信号量集的信号量数量限制 (SEMMSL),或者与 key 对应的信号量集已经存在,并且 nsems 更大,则可以semget返回EINVAL比那组信号量的数量还要多。”

我怀疑你遇到了第二种情况 - 检查你是否已经创建了一个具有相同键和 3 个信号量的集合。

于 2013-03-12T23:51:23.967 回答