2014-02-09 4 views
0

Я хочу создать семафор счетчик, с помощью этого кода:Семафор счетчик: программа зависает

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); 
} 

Когда я выполнил свою программу, у меня нет никаких ошибок, но он висит и не создавать эту СЭМ. Любое предложение о том, что может быть проблемой? Я ошибаюсь с фальцами? Thaks

ответ

0

documentation От

SETALL

Установить значение семафора для всех семафоров множества, используя arg.array,

Для 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] Потому что вы создаете только один семафор.

+0

Спасибо, вы были правы, теперь это работает! – user3266496

Смежные вопросы