www.pudn.com > LFYOS.zip > sem.c
/*test result is 4.46us*/ #include#include #include #include #include #include #define KEY 12345 #define NUMBER 100 #define THREAD_NUMBER 2048 int s_id; void init() { union semun { int val; struct semid_ds *buf; ushort arry[1]; }arg; s_id=semget(KEY,2,0666|IPC_CREAT); if(s_id<0) {printf("get fail ");exit(0);} arg.val=0; if(semctl(s_id,0,SETVAL,arg.val)<0) {printf("control 0 fail ");exit(0);} arg.val=0; if(semctl(s_id,1,SETVAL,arg.val)<0) {printf("control 1 fail ");exit(0);} return; } void p0(int n) { struct sembuf sbuf; sbuf.sem_num=0; sbuf.sem_op=0-n; sbuf.sem_flg=0; if(semop(s_id,&sbuf,1)<0) {printf("p0 fail");exit(0);}; return; } void p1(int n) { struct sembuf sbuf; sbuf.sem_num=1; sbuf.sem_op=0-n; sbuf.sem_flg=0; if(semop(s_id,&sbuf,1)<0) {printf("p0 fail");exit(0);}; return; } void v0(int n) { struct sembuf sbuf; sbuf.sem_num=0; sbuf.sem_op=n; sbuf.sem_flg=0; if(semop(s_id,&sbuf,1)<0) {printf("V0 fail");exit(0);}; return; } void v1(int n) { struct sembuf sbuf; sbuf.sem_num=0; sbuf.sem_op=n; sbuf.sem_flg=0; if(semop(s_id,&sbuf,1)<0) {printf("V0 fail");exit(0);}; return; } void f0() { int i,j,t,x; t=time(&x); for(i=0;i