There are two *.c.
main.c{
semid=semget(mykey,size,IPC_CREAT|0777)
short initarray[4],outarray[4];
initarray[0]=5;
initarray[1]=10;
initarray[2]=0;
initarray[3]=0;
semctl(semid,4,SETALL,initarray);
semctl(semid,4,GETALL,outarray);
printf("sem init vals %d %d %d %d\n",
outarray[0],outarray[1],outarray[2],outarray[3]);
}
gcc -o main main.c
./main
=>5,10,0,0
It is right!
then r.c
{
if((semid=semget(thekey,0,0))==-1)
{
printf("fail to creat semphore with the key!");
}
short outarray[4];
semctl(semid,4,GETALL,outarray);
printf("sem init vals %d %d %d %d\n",
outarray[0],outarray[1],outarray[2],outarray[3]);
struct sembuf get_se;
get_se.sem_op=-1;
get_se.sem_flg=SEM_UNDO;
get_se.sem_num=0;
semop(semid,&get_se,1);
short outarray[4];
semctl(semid,4,GETALL,outarray);
printf("sem init vals %d %d %d %d\n",
outarray[0],outarray[1],outarray[2],outarray[3]);
}
gcc r.c
./a.out
5,10,0,0
4,10,0,0
IT is also right
then run ./a.out again
5,10,0,0
4,10,0,0
WHY?
I thought the result was
4,10,0,0
3,10,0,0
something is wrong with "zhong wen shu ru fa",hehe |