4.3 信号量通信编程.pptxVIP

  • 0
  • 0
  • 约1.38千字
  • 约 25页
  • 2026-02-04 发布于湖南
  • 举报

信号通信编程任务9管道通信编程任务10信号通信编程

1命名管道2无名管道

任务11信号量通信编程

信号量概述信号量(Semaphore)是用来解决进程之间的同步与互斥问题的一种进程之间通信机制,包括一个称为信号量的变量和在该信号量下等待资源的进程等待队列,以及对信号量进行的两个原子操作(PV操作)。其中信号量对应于某一种资源,取一个非负的整型值。信号量值指的是当前可用的该资源的数量,若它等于0则意味着目前没有可用的资源。同步互斥临界资源临界区原子性

信号量概述临界资源同时被多个进程访问的资源。临界区用来访问临界资源的代码。互斥在任意时刻,只允许一个进程进入临界资源。

信号量概述同步两个或多个数据库、文件、模块、线程之间用来保持数据内容一致性的机制。原子性执行事件时没有中间过程,且操作不可中断,要么执行完,要么没有执行。

PV原子操作

信号量概述P操作如果有可用的资源(信号量值0),则占用一个资源(给信号量值减去一,进入临界区代码);如果没有可用的资源(信号量值等于0),则被阻塞到,直到系统将资源分配给该进程(进入等待队列,一直等到资源轮到该进程)。PV原子操作

信号量概述如果在该信号量的等待队列中有进程在等待资源,则唤醒一个阻塞进程。如果没有进程等待它,则释放一个资源(给信号量值加一)。V操作PV原子操作

当发车时间到,售票员关好车门后,司机才能启动车辆,然后,售票员才开始售票。而到站时,司机停车后,售票员才能打开车门。司机进程售票员进程系统实例

实例解析:在这个问题中没有资源的抢夺,所以无互斥信号量。司机和售票员是同步关系,司机需要接收门是否关好的信号量,而售票员需要接收车是否到站的信号量。

实例活动顺序:关车门→启动车辆→售票→到站停车→开车门初始状态为:停车且门未关流程:售票员给司机关门的信号,司机收到后开始正常行驶车辆,到站时由司机给售票员停车的信号。

实例S1表示是否允许司机启动汽车,初值为0。S2表示是否允许售票员开门,其初值为0。

信号量编程使用信号量的步骤创建信号量或获得在系统已存在的信号量,此时需要调用semget()函数。不同进程通过使用同一个信号量键值来获得同一个信号量。1

信号量编程使用信号量的步骤初始化信号量,此时使用semctl()函数的SETVAL操作。当使用二维信号量时,通常将信号量初始化为1。2

信号量编程使用信号量的步骤进行信号量的PV操作,此时调用semop()函数。这一步是实现进程之间的同步和互斥的核心工作部分。3

信号量编程使用信号量的步骤如果不需要信号量,则从系统中删除它,此时使用semclt()函数的IPC_RMID操作。此时需要注意,在程序中不应该出现对已经被删除的信号量的操作。4

信号量编程函数semget()是创建信号量函数,它的作用是得到一个信号量集标识符或创建一个信号量集对象并返回信号量集的标识符。它有3个参数:参数1:ftok得到的关键字参数2:创建信号量集的个数,只在创建信号量集时有效?参数3:标记合集

信号量编程semget()函数语法

信号量编程semctl()函数语法

信号量编程semop()函数语法

任务11信号量通信

任务11:信号量通信编程实验要求:编写程序,实现创建一个子进程,然后使用信号量为控制两个进程(父子进程)间的执行顺序。实训

文档评论(0)

1亿VIP精品文档

相关文档