信号量同步编程

信号量同步

一。核心概念

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

  称为进程间的同步。

二。生产力消费问题

  (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)加入同步控制

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

时间: 2024-12-28 16:13:10

信号量同步编程的相关文章

第三季-第17课-信号量同步编程

第17课-信号量同步编程 17.1 核心概念--进程同步 一组并发进程进行互相合作.互相等待,使得各进程按一定的顺序执行的过程称为进程间的同步. 17.2 生产者消费者问题 1. 问题描述 这里面有两个角色:生产者和消费者.假设生产者生产的产品需要两步才能完成并且使用.但是,当生产者刚刚完成了对产品的第一步加工的时候,产品就被消费者买走了.可是他们之间并没有相应的沟通,这就导致,消费者会以为他买到了完成的产品. 2. 程序化 在文件夹里面创建producer.c和customer.c文件,同时创

Linux 信号量同步编程

前一篇文章概述了Linux 系统中信号量互斥编程,这篇文章正好是前一篇的姊妹篇----信号量同步.说它们是姊妹篇是因为它们都是利用了内核的信号量机制实现了进程间的通信.因为两者所解决的问题不同,因此它们使用的场景就会有所区别. 信号量互斥主要解决的问题是:进程间需要同时访问某种资源,但是它们对资源的操作会互相影响对方的操作结果,因此需要一种机制实现让进程在访问资源时能禁止其他进程访问相同的资源.而信号量同步则解决了另一个经典问题:生产者和消费者之间的协同工作问题. 首先描述一下生产者和消费者问题

第15课-信号量同步编程

1.进程同步:各进程按照一定的顺序执行的过程.异步就不一定有顺序,而是随机的执行.一组并发进程进行互相合作,互相等待,使得各进程按照一定的顺序执行的过程.2.system系统调用可以按照字符串方式调用系统命令.3.生产者只需要释放信号量:消费量只需要获取而不需要释放4.信号量初始值等于0,在互斥通讯中大于05.生产者:(1)创建信号量集合的键值(ftok函数)(2)创建信号量(semget函数)(3)设置信号量初始值为0(semctl(信号量ID,第几个信号量,什么操作[,欲设置的值])函数)(

深入理解计算机系统——第12章:用信号量同步线程

用信号量同步线程: 同步错误: 一般而言你没有办法预测操作系统是否将你的线程选择一个正确的顺序执行. 12.5.1 进度图 (1)进度图:将n个并发线程的执行模型化为一条n维笛卡尔空间中的轨迹线. (2)每条轴k对应着线程k的进度. (3)每个点Ik代表着k线程已完成指令Ik这一个状态,原点处代表初始状态. (4)进度图是指令执行模型化为从一个状态到另一个状态的转换,两条指令不能在同一时刻完成,对角线不允许的.

Linux 信号量互斥编程

所谓信号量,其实就是一个数字.内核给这个数字赋予一定的含义,让它等于不同的值时所表示的意义不同.这样就可以用它来标示某种资源是否正被使用.信号的分类其实挺多的,主要还是二值和计数器.这里讨论二值 现在有个文件,有两个进程要同时访问它.进程A 要往里面写入 "Math class is cancel",进程B 要往里面写入“English test”.正常情况下这两个信息会被完整的写入文件中.但是如果进程A写到"Math class" 就暂停,接着B进程就开始写“En

linux应用开发-信号量互斥编程

linux应用开发-信号量互斥编程 一 相应的函数 1 创建/打开信号量集合 函数名 semget 函数原形 int semget(key_t key, int nsems, int semflg) 函数功能 获取信号量集合的标识符 当key所指的信号量不存在的时候,且semflg里包含了IPC_CREAT,就会创建一个信号量的集合 所属头文件 <sys/types.h> <sys/ipc.h> <sys/sem.h> 返回值 成功返回信号量的标识符 失败返回-1 参数

Linux多线程--使用信号量同步线程【转】

本文转载自:http://blog.csdn.net/ljianhui/article/details/10813469 信号量.同步这些名词在进程间通信时就已经说过,在这里它们的意思是相同的,只不过是同步的对象不同而已.但是下面介绍的信号量的接口是用于线程的信号量,注意不要跟用于进程间通信的信号量混淆,关于用于进程间通信的信号量的详细介绍可以参阅我的另一篇博文:Linux进程间通信——使用信号量.相似地,线程同步是控制线程执行和访问临界区域的方法. 一.什么是信号量 线程的信号量与进程间通信中

在程序中利用信号量同步来模拟生产者与消费者

信号量同步的概念: 一组并发进程进行相互合作.相互等待,使得各进程按一定的顺序执行的过程称为进程间的同步. customer.c product.c 运行生产者 运行消费者:

js学习总结----ajax中的http请求方式及同步编程和异步编程

一.请求方式 var xhr = createXHR(); xhr.open("get","/getList?num=12",true); xhr.open("post","/getList",true); xhr.send('{"name":"zhangsan","age":7}') //HTTP METHOD;客户端向服务器端发送请求的方式 //以下的请求方式不管