信号量计数器:程序挂起

时间:2014-02-09 17:24:47

标签: c linux unix semaphore hang

我想创建一个信号量计数器,使用以下代码:

union semun arg_assistant;
int max_ass = atoi(argv[1]);
printf("Num massimo di assistant %d\n", max_ass);
fflush(stdout);
if ((sem_a = semget(IPC_PRIVATE, 1, 0600)) == -1) {
    perror("semget");
    exit(EXIT_FAILURE);
}
arg_assistant.val = max_ass;
if (semctl(sem_a, 0, SETALL, arg_assistant) == -1) {
    perror("semctl");
    exit(EXIT_FAILURE);
}   

当我执行我的程序时,我没有错误但它挂起并且它不会创建这个sem。关于可能出现什么问题的任何建议?我犯了一些错误吗? Thaks

1 个答案:

答案 0 :(得分:0)

来自documentation

  

SETALL

     

使用arg.array,

为集合的所有信号量设置semval

对于SETALL,您需要值数组

    unsigned short int  sem_array[1] ;
    sem_array[0] = max_ass;
    arg_assistant.array = sem_array;

    if (semctl(sem_a, 0, SETALL, arg_assistant) == -1) {
       perror("semctl");
       exit(EXIT_FAILURE);
    }

sem_array[1]因为你只创建了一个信号量。