一、信号量
实现模拟售票问题:
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
、、、
数据读走之后认为就没了
利用管道实现父子进程发送接收:
实现父子进程双向发送接收: