信号量同步编程

信号量同步

一。核心概念

  进程同步核心概念:一组并发进程进行互相合作,互相等待,使得各进程按一定的顺序执行的过程

  称为进程间的同步。

二。生产力消费问题

  (1)问题描述      

  (2)问题程序化         

    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/ipc.h>
    #include <sys/sem.h>

    void main()
    {
      int fd;
      int semid;
      struct sembuf sops;
      key_t key;
      key = ftok("/home",2);
      /*创建信号量*/
      semid = semget(key,1,IPC_CREAT);
      semctl(semid,0,SETVAL,0);
      /*创建产品-文件*/
      fd = open("./product.txt",O_RDWR|O_CREAT,0775);
      /*休息*/
      sleep(20);
      /*向产品文件里面填充内容*/
      write(fd,"the product is finished",25);
      close(fd);
      /*释放信号量*/
      sops.sem_num = 0;
      sops.sem_op = 1;
      sops.sem_flg = SEM_UNDO;
      semop(semid,&sops,1);
      }

  /******************************************/      

    #include <stdlib.h>
    #include <sys/ipc.h>
    #include <sys/sem.h>
    #include <sys/types.h>
    #include <stdio.h>

    void main()
    {
      int fd;
      int semid;
      int ret;
      struct sembuf sops;
      key_t key;
      key = ftok("/home",2);
      /*创建信号量*/
      semid = semget(key,1,IPC_CREAT);
      /*获取信号量*/
      sops.sem_num = 0;
      sops.sem_op = -1;
      sops.sem_flg = SEM_UNDO;
      ret = semop(semid,&sops,1);
      printf("val = %d\n",ret);
      /*取走产品文件*/
      system("cp ./product.txt ./ship/");
     }

  (3)加入同步控制      

     信号量控制把同步进行任务完成

posted @ 2015-11-13 21:51  吕晓宁  阅读(195)  评论(0编辑  收藏  举报