我使用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
;
答案 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)。