#include<unistd.h> #include<sys/types.h> #include<sys/ipc.h> #include<sys/sem.h> union semun{ int val; struct semid_ds *buf; unsigned short *array; }; int main(){ int sem_id = semget(IPC_PRIVATE,2,0666); union semun sem_args; unsigned short arr[2] = {1,0}; sem_args.array = arr; semctl(sem_id,1,SETALL,sem_args); struct sembuf sem_done1[1] = {0,-1,SEM_UNDO}; struct sembuf sem_up1[1] = {0,1,SEM_UNDO}; struct sembuf sem_done2[1] = {1,-1,SEM_UNDO}; struct sembuf sem_up2[1] = {1,1,SEM_UNDO}; if(fork() == 0){ while(1){ semop(sem_id,sem_done1,1); printf("childn"); semop(sem_id,sem_up2,1); } }else{ while(1){ semop(sem_id,sem_done2,1); printf("parentn"); semop(sem_id,sem_up1,1); } } return 0; }
|
近期评论