【问题标题】:semaphore initialization in cc中的信号量初始化
【发布时间】:2012-12-16 20:02:27
【问题描述】:
arg.val = 1;

    if (sem_id = semget(IPC_PRIVATE, 1, 0600 | IPC_CREAT) == -1 ){
            perror("Creating semaphore failed");
            exit(1);
    }
    else {
            printf("Creating a semaphore with ID: %d \n",sem_id);
            if (semctl(sem_id, 0, SETVAL, arg) == -1 ) {                       
                    perror("Initialization of semaphore failed\n");
                    exit(1);
            }
    }

我正在尝试创建和初始化一个信号量,当我编译我的程序时它返回给我:
“信号量初始化失败 :标识符已移除

你能解释一下为什么会这样吗?

【问题讨论】:

  • 您的 if 语句中缺少右括号。
  • 我忘记了!抱歉!您能发现其他问题吗?

标签: c semaphore


【解决方案1】:
if (sem_id = semget(IPC_PRIVATE, 1, 0600 | IPC_CREAT) == -1 )

被解析(因为==的绑定比=强)

if (sem_id = (semget(IPC_PRIVATE, 1, 0600 | IPC_CREAT) == -1) )

你可能想要

if ((sem_id = semget(IPC_PRIVATE, 1, 0600 | IPC_CREAT)) == -1 )

【讨论】:

    【解决方案2】:

    操作 == 的优先级高于操作 =。我相信这意味着这意味着 sem_id 被设置为一个真实的值。您应该在 if 语句中对操作进行分组。

    if((sem_id = semget(IPC_PRIVATE, 1, 0600 | IPC_CREAT)) == -1){
    

    【讨论】:

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