我想创建一个信号量计数器,使用以下代码:
union semun arg_assistant;
int max_ass = atoi(argv[1]);
printf("Num massimo di assistant %dn", 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。关于可能是什么问题的任何建议?我用法格斯犯了什么错误吗?他克斯
来自文档
塞托尔
使用 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]
,您只会创建一个信号量。