c中的信号量初始化

时间:2012-12-16 20:02:28

标签: c semaphore

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

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

你能解释一下这种情况发生的原因吗?

2 个答案:

答案 0 :(得分: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 )

答案 1 :(得分:1)

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

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