- 论坛徽章:
- 0
|
10可用积分
int sem_v_wait(int semid)
{
struct sembuf sops = {0, -1, SEM_UNDO};
return (semop(semid, &sops, 1));
}
int sem_wait_zero(int semid)
{
struct sembuf sops = {0, 0, 0};
return semop(semid, &sops, 1);
}
sem_wait_zero这个函数是当semid的value值为0时程序才会向下继续执行,否则睡觉等待。
可是我的程序运行一段时间后,在semid的value值为1的情况下,程序异常执行了,更加怪异的是每次都是value到34时在此挂起睡觉,不知道是什么原因。
然后在通过34次触发调用sem_v_wait函数,当semid的value值重新回到0时, 又回归正常状态,并且就不再出现这种问题。
还有我发现一个情况无论是否正常状态sem_wait_zero的返回值都是1,应该说明semop调用本身没什么问题。
怀疑semop受到了其他信号量的影响,那位大神有遇到这种情况,如何解决。
|
|