第15课-信号量同步编程

1.进程同步:各进程按照一定的顺序执行的过程。异步就不一定有顺序,而是随机的执行。一组并发进程进行互相合作,互相等待,使得各进程按照一定的顺序执行的过程。
2.system系统调用可以按照字符串方式调用系统命令。
3.生产者只需要释放信号量;
消费量只需要获取而不需要释放
4.信号量初始值等于0,在互斥通讯中大于0
5.生产者:
(1)创建信号量集合的键值(ftok函数)
(2)创建信号量(semget函数)
(3)设置信号量初始值为0(semctl(信号量ID,第几个信号量,什么操作[,欲设置的值])函数)
(4)创建产品(文件)
(5)休息
(6)往产品(文件)里面填充内容
(7)释放信号量(semop函数,struct sembuf结构体)
6.消费者
(1)打开信号量集合,要知道对应生产者的键值,即ftok函数和semget函数的调用一样。
(2)获取信号量(semop函数,struct sembuf结构体),尤其是结构体有变化。有可能失败,可以打印其返回值。注意sembuf的三个成员都要赋值。SEM_UNDO最常用设置第三个成员,就是为了在出错的时候,系统帮助进程释放信号量,不然其他进程无法获取。
(3)获取产品文件(比如利用system调用进行复制等)

时间: 2024-10-05 05:01:56

第15课-信号量同步编程的相关文章

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

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

第三季-第15课-信号通讯编程

第15课-信号通讯编程 15.1 核心理论 1. 信号 在古老的战场上,信号是最有效,最直接的通讯方式:在linux系统中,信号(signal)同样也是最古老的进程间通讯机制. 2. 信号处理流程 进程A/内核---(1)选择信号-----(2)发送信号-----(3)处理信号----进程B. 3. 信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示),其中常见的信号有: SIGKILL:杀死进程 SIGSTOP:暂停进程 SIGCHLD:子进

第三季-第16课-信号量互斥编程

第16课-信号量互斥编程 16.1 公示栏问题(问题引入) 1. 问题描述 这里面我们举一个小例子.在一个班级里就有一个公示栏,A同学想写“数学课考试”,B同学想写“英语课取消”.但是有一个时间,A同学只写下了“数学课”三个字,没来得及写后面的内容就出去了,但是这个时候B同学来写下了“英语课取消”.这样让同学们看来就成了“数学课英语课取消”,给班级的其他同学造成了歧义. 这也就是我们说的同时访问一个资源,造成了,数据的混乱.若是有多个进程同时访问一个资源,同样会造成这个问题. 2. 问题程序化

Linux 信号量同步编程

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

信号量同步编程

信号量同步 一.核心概念 进程同步核心概念:一组并发进程进行互相合作,互相等待,使得各进程按一定的顺序执行的过程 称为进程间的同步. 二.生产力消费问题 (1)问题描述   (2)问题程序化    #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <sys/ipc.h> #include <sys/sem.

大数据Spark蘑菇云前传第15课:Scala类型参数编程实战及Spark源码鉴赏(学习笔记)

前传第15课:Scala类型参数编程实战及Spark源码鉴赏 本課課程: Spark源码中的Scala类型系統的使用 Scala类型系統编程操作实战 Spark源码中的Scala类型系統的使用 classOf[RDD[_]] 這個也是类型系統 這里的意思是說 B 這種類型必需至少是 A 這樣類型 Ordering Scala类型系統编程操作实战 作為類型系統最大的就可以對類型進行限制,在Scala 中的類型系統,他本身也作為對象.e.g. 我們可以建立 Person 這個類,現在可以建立一個什麼

【C语言探索之旅】 第二部分第一课:模块化编程

内容简介 1.课程大纲 2.第二部分第一课: 模块化编程 3.第二部分第二课预告: 进击的指针,C语言王牌 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量

Spark3000门徒第15课RDD创建内幕彻底解密总结

今晚听了王家林老师的第15课RDD创建内幕彻底解密,课堂笔记如下: Spark driver中第一个RDD:代表了Spark应用程序输入数据的来源.后续通过Transformation来对RDD进行各种算子的转换实现算法 创建RDD的方法:1,使用程序中的集合创建RDD;2,使用本地文件系统创建RDD:3,使用HDFS创建RDD 4,基于DB创建RDD5,基于NoSQL,例如HBase 6,基于S3创建RDD 7,基于数据流创建RDD 不指定并行度,有多少core就用多少core,所以需要资源管

BeagleBone Black板第六课:C++编程控制GPIO基础

BBB板第六课:C++编程控制GPIO基础 在一上课我们通过Shell脚本编程实现了对GPIO端口的简单输出控制,实现对两个LED指示灯的交替点亮和关闭,接下来的一两节课,将通过C++程序来实现Shell脚本的功能.为了实现对应的程序控制,我查阅了好多资料,测试过程中发觉网上的一些程序套用过来总是出现各种各样的编译错误,压根就控制不了BBB板,不知是我的BBB板太新,还是以前的程序太旧.最后还是从头开始,重新研究BBB板的文件系统,找出头文件,找出所有相关的函数,终于实现GPIO的C++程序控制