信号量使用介绍

信号量使用介绍_第1张图片

  1 #include 
  2 #include
  3 #include 
  4 
  5 //       int semget(key_t key, int nsems, int semflg);
  6 //       int semop(int semid, struct sembuf *sops, size_t nsops);
  7 //       int semctl(int semid, int semnum, int cmd, ...);
  8 union semun {
  9                int              val;    /* Value for SETVAL */
 10                struct semid_ds *buf;    /* Buffer for IPC_STAT, IPC_SET */
 11                unsigned short  *array;  /* Array for GETALL, SETALL */
 12                struct seminfo  *__buf;  /* Buffer for IPC_INFO
 13                                            (Linux-specific) */
 14 };
 15 
 16 void pGetKey(int semid)
 17 {
 18         struct sembuf sops;
 19         sops.sem_num = 0;
 20         sops.sem_op  = -1;
 21         sops.sem_flg = SEM_UNDO;
 22 
 23         semop(semid,&sops,1);
 24         printf("get key\n");
 25 }
 26 void vPutKey(int semid)
 27 {
 28         struct sembuf sops;
 29         sops.sem_num = 0;
 30         sops.sem_op  = 1;
 31         sops.sem_flg = SEM_UNDO;
 32 
 33         semop(semid,&sops,1);
 34         printf("put back key\n");
 35 }
 36 
 37 int main()
 38 {
 39         int semid;
 40         key_t key;
 41         key = ftok(".",3);
 42         semid = semget(key,1,IPC_CREAT|0600);
 43 
 44         union semun temp;
 45         temp.val = 0;
 46         semctl(semid,0,SETVAL,&temp);
 47 
 48         pid_t pid;
 49         pid=fork();
 50 
 51         if(pid>0){
 52                 pGetKey(semid);
 53                 printf("this is father\n");
 54                 vPutKey(semid);
 55                 semctl(semid,0,IPC_RMID);
 56         }else if(pid==0){
 57                 printf("this is child\n");
 58                 vPutKey(semid);
 59         }
 60 
 61         return 0;
 62 }
~                                                                                                                                                                                                                                                                                                                                                                                                                       
~                                                                                                                                                                                                                                                                                                                                                                                                                       
~                                        

你可能感兴趣的:(Linux系统编程,开发语言,服务器,linux,运维)