交流
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;
}
私は2つのバイナリを作成しました。
最初に ./pro を実行し、次に ./a.out を実行
プロはロックを取得しましたが。a.out はロックを取得することもできます。ロックを取得すべきではありません。セマフォIDを印刷してみました。それは同じだ。原因は何ですか?