Linux信号量实现(c)
代码:
#include<semaphore.h> #include<unistd.h> #include<stdio.h> #include<stdlib.h> #include<pthread.h> #include<sys/types.h> #include<sys/wait.h> #include<fcntl.h> #include<sys/ipc.h> int main(int argc,char **argv) { int pid; sem_t *sem; const char sem_name[]="mysem"; pid=fork(); if(pid<0) { printf("Error in the fork\n"); } else if(pid==0) { sem=sem_open(sem_name,O_CREAT,0644,1);//creat if(sem==SEM_FAILED) { printf("unable to create semaphore...\n"); sem_unlink(sem_name);//delete exit(-1); } sem_wait(sem);//P for(int i=0;i<3;i++) { printf("Child process run:%d\n",i); sleep(1); } sem_post(sem);//V } else { sem=sem_open(sem_name,O_CREAT,0644,1);//create if(sem==SEM_FAILED) { printf("unable to create semaphore...\n"); sem_unlink(sem_name);//delete exit(-1); } sem_wait(sem);//P for(int i=0;i<3;i++) { printf("Parent process run:%d\n",i); sleep(1); } sem_post(sem);//V wait(NULL); sem_close(sem);//close sem_unlink(sem_name); } return 0; }
运行结果:
