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

时间:2016-08-25 06:05:14

标签: c semaphore

我使用System V

创建了semget信号量
#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;

1 个答案:

答案 0 :(得分:1)

semget()的第二个参数是信号量集中的信号量数。您指定了<tr> <td colspan="3"> <strong>Name of Liaison Officer</strong> <br /> <br /> @Html.DisplayFor(m => m.TPInformationDetails.NameofLiaisonOfficer) </td> @* <td> <strong>Room Number</strong> <br /> <br /> </td>*@ <td> <strong>Contact Number</strong> <br /> <br /> @Html.DisplayFor(m => m.TPInformationDetails.LOContactNo) </td> <td> <strong>Email Address</strong> <br /> <br /> @Html.DisplayFor(m => m.TPInformationDetails.LOEmail) </td> </tr> <!-- Table Row --> <tr class="even"> <td colspan="3"> <strong>Name of Alternate Liaison Officer</strong> <br /> <br /> @Html.DisplayFor(m => m.TPInformationDetails.NameofAlternateLiaisonOfficer) </td> <td> <strong>Contact Number</strong> <br /> <br /> @Html.DisplayFor(m => m.TPInformationDetails.AlternateLOContactNo) </td> <td> <strong>Email Address</strong> <br /> <br /> @Html.DisplayFor(m => m.TPInformationDetails.AlternateLOEmail) </td> </tr> <!-- Table Row --> ,因此您获得了一个信号量。访问除一个信号量以外的任何信息都会导致错误。

比如说,将1更改为1,您应该可以迭代信号量0..9(包括0和9)。