如何使用semctl设置信号量集中第n个信号量的值
How to use semctl to set value of nth semaphore in the semaphore set
我使用 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:semctl\n");
exit(1);
}
}
以上代码对 iter=0
运行但对其他代码运行失败。在 struct semun sem_val
中我设置了值 sem_val.val=1
;
semget()
的第二个参数是信号量集中的信号量数量。你指定了 1
,所以你得到了一个信号量。访问一个信号量以外的任何内容都会导致错误。
将 1
更改为 10
,比如说,您应该可以迭代信号量 0..9(含)。
我使用 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:semctl\n");
exit(1);
}
}
以上代码对 iter=0
运行但对其他代码运行失败。在 struct semun sem_val
中我设置了值 sem_val.val=1
;
semget()
的第二个参数是信号量集中的信号量数量。你指定了 1
,所以你得到了一个信号量。访问一个信号量以外的任何内容都会导致错误。
将 1
更改为 10
,比如说,您应该可以迭代信号量 0..9(含)。