【问题标题】:Semaphore counter: program hangs信号计数器:程序挂起
【发布时间】:2014-02-09 17:24:46
【问题描述】:

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

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。关于可能是什么问题的任何建议?我在 flgs 上犯了一些错误吗? 谢谢

【问题讨论】:

    标签: c linux unix semaphore freeze


    【解决方案1】:

    来自documentation

    设置

    使用 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] 因为你只创建了一个信号量。

    【讨论】:

      猜你喜欢
      • 2015-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多