0
我想在一個項目中使用信號量,但我在這裏卡住了。我寫了三個程序來打印所有三個程序的關鍵區域的語句,以瞭解信號量如何同步。有沒有輸出,並使程序進入睡眠state.Here是代碼 -使用信號燈沒有輸出
int main()
{
int fd,ret,kk,x=1,y=2;
struct sembuf sem[2]={{0,-1,SEM_UNDO},
{0,1,SEM_UNDO}};
union semun a;
a.val=1;
kk=semget(1234,1,IPC_CREAT);
semctl(kk,0,SETVAL);
semop(kk,&sem[0],1);
printf("In client1...\n");
printf("In client1...\n");
sleep(3);
semop(kk,&sem[1],1);
}
我做了這個程序客戶端2 & client3的2份。
這將永遠不會工作,因爲第二個參數是semnum,在我的情況下應該是0,因爲這是該集合的第一個也是唯一的。所以0代表索引。 – Imdad
嗯,我上次使用SysV信號已經有一段時間了。當然,它應該是'union semun semopts; semopts.val = 1; semctl(kk,0,SETVAL,semopts);'我編輯了我的答案。 – norbert108
是的,工作..謝謝! – Imdad