所以,如果我有一个信号灯设置semid
与num_of_sems
信号灯和sembuf*deleter_searchers_down
Semop:减少一组信号量时是立即减少还是在第一次失败时阻塞?
struct sembuf *deleter_searchers_down
= malloc(sizeof (*deleter_searchers_down) * num_of_sems);
for (i = 0; i < num_of_sems; ++i) {
(deleter_searchers_down + i)->sem_op = -1;
(deleter_searchers_down + i)->sem_num = i;
(deleter_searchers_down + i)->sem_flg = SEM_UNDO;
}
semop(semid, deleter_searchers_down, num_of_sems);
到SEMOP将尝试一次降低集合中的所有信号量还是会阻止一次它试图调用降低第一个信号量是0,并继续其他一些进程后,特定的信号量?
好的信号量完全符合你说的,也就是说,当它们被降低时,如果它们是0,它们会阻止该过程。 – byrondrossos 2012-04-18 09:33:02
仔细阅读这个问题plz - 将semop试图降低所有的零和所有的块,或将它阻止遇到的第一个(第一个?)0 – 2012-04-18 09:35:17
您可以指定IPC_NOWAIT立即返回失败。请参阅:http://pubs.opengroup.org/onlinepubs/7908799/xsh/semop.html – RedX 2012-04-18 09:53:30