我有这个代码,它基本上在数字sem
的信号量上产生一个P.信号量在池中。问题是,有时候我会得到Invalid argument
而我无法找出原因。
bool sem_p(key_t key, int sem){
int semid = semget(key, sem, 0666);
struct sembuf sb = {sem, -1, 0};
if(semop(semid, &sb, 1) == -1){
perror("sem p");
printf("sem %d\n", sem);
return FALSE;
}
return TRUE;
}
调用该函数时,会打印
sem p: Invalid argument
答案 0 :(得分:2)
检查是否
int semid = semget(key, sem, 0666);
返回成功或失败。正如@VladLazaranenko所提到的,可能存在很多可能的错误。检查您调用的每个函数的每个返回码(如果它们返回值) - 对于生产系统。