信号量和管道

一、信号量

实现模拟售票问题:

1、信号量的机制:描述可使用资源的个数。

(1)P操作:表示使用这个资源,资源个数减一

      逻辑:尝试获取资源——有资源可用直接使用 |  无资源可用等待

            如果信号量的sem值小于等于0,则P操作就会阻塞,如果信号量的值大于0,才可以执行p操作进行减1

     (2) V操作:表示获得这个资源,资源个数加一

              如果有进程在等待该资源,则唤醒一个进程

缺少P(mutex) 就不能保证临界资源的互斥访问。缺少 V(mutex) 会导致资源永不被释放,等待进程永不被唤醒。

2、信号量的初始化:

3、信号量的p、v操作:

 功能:将信号量的值减1,若信号量的值小于等于0,此函数会引起调用者阻塞

参数:sem:信号量地址           返回值:成功返回0,失败返回-1

功能:执行v操作,执行一次,信号量的值加1

参数:sem:信号量地址           返回值:成功返回0,失败返回-1

创建四个信号输出:

二、管道:

int pipe(int pipefd[2])

创建并判断管道是否成功

参数:pipefd :获取管道的两端:读端:pipefd【0】,写端pipefd【1】

返回值:成功 0;失败:-1 

1、管道大小,65536字节,64k

、、、

数据读走之后认为就没了

利用管道实现父子进程发送接收:

实现父子进程双向发送接收:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值