在C语言中使用信号量 a、 c b、 c

在C语言中使用信号量 a、 c b、 c,c,unix,C,Unix,我创建了两个二进制文件,一个是读时睡眠(pro),另一个是不睡眠(a.out) 首先执行。/pro 那就出去吧 尽管pro已经获得了Locked。a、 我们也可以获得锁。它不应该获得锁。 我试着弹了一下信号灯的ID,还是一样的。可能的原因是什么?首先,尝试将IPC_create | IPC_EXCL传递到semget()。这里有一个使用信号量的合适例子。谢谢代码设计师。这是一个很好的链接。 union semun{ int val; struct senid_ds *buf; uns

我创建了两个二进制文件,一个是读时睡眠(pro),另一个是不睡眠(a.out)

首先执行。/pro 那就出去吧

尽管pro已经获得了Locked。a、 我们也可以获得锁。它不应该获得锁。
我试着弹了一下信号灯的ID,还是一样的。可能的原因是什么?

首先,尝试将
IPC_create | IPC_EXCL
传递到
semget()
。这里有一个使用信号量的合适例子。谢谢代码设计师。这是一个很好的链接。
union semun{
  int val;
  struct senid_ds *buf;
  unsigned short *array;
};
union semun arg;

int func(){
 key_sem = ftok(".",67);
        if(FAILURE == key_sem){
                perror("\n key_sem:");
                return FAILURE;
        }
        key_val++;
        semid = semget(key_sem,1,IPC_CREAT);
        if(FAILURE == semid){
                perror("\n semid:");
                return FAILURE;
        }
        printf("\n Key : %d Semaphore ID is : %d \n",key_sem,semid);
    arg.val = 1;
    ret = semctl(semid,0,SETVAL,arg);

}
int ret;
struct sembuf op[1];

int read_pos(){

     op[0].sem_num = 0;
     op[0].sem_op = -1;
     op[0].sem_flg = SEM_UNDO;

     printf("\n gng to lock! \n");
     printf("\n semid: %d \n",details.sem_id);

     ret = semop(details.sem_id,op,1);
     printf("\n Locked! \n");

     sleep(15);


     op[0].sem_op = 1;
     ret = semop(details.sem_id,op,1);
     printf("\n Unlocked! \n");

    return SUCCESS;
}

int main(){
 read_pos();
 return 0;
}