1

我有这段代码,它基本上在带有数字的信号量上生成一个 P sem。信号量在池中。问题是有时我得到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
4

1 回答 1

2

检查是否

int semid = semget(key, sem, 0666);

返回成功或失败。正如@VladLazaranenko 提到的那样,可能存在很多错误。检查您调用的每个函数的每个返回代码(如果它们返回值) - 对于生产系统。

于 2014-02-03T15:58:01.677 回答