c -如何使用semctl设置信号量集中的第n个信号量的值



我使用semget创建了一个System V信号量

#define SEM_ID 250
...
sem_set_id = semget(SEM_ID, 1, IPC_CREAT | 0660);
if (sem_set_id == -1) {
perror("main: semget");
exit(1);

现在,根据我的理解,这创建了一个信号量集,其中有许多信号量。但是如何识别一个特定的信号量来设置它的值使用semctl

int iter=0;
for(iter=0;iter<no_of_jobs;iter++)
{
    int rc=semctl(semid,iter,SETVAL, sem_val);
    if(rc==-1)
        {printf("Error:semctln");
        exit(1);
        }
}

以上代码在iter=0上运行,但在其他情况下失败。在struct semun sem_val中,我设置了值sem_val.val=1;

semget()的第二个参数是信号量集中的信号量数量。您指定了1,因此您得到了一个信号量。访问除一个信号量以外的任何信号量都将导致错误。

1更改为10,那么您应该可以遍历信号量0..9包容。

最新更新