控制线程间顺序的信号量 与进程间的通信

信号量

信号量的机制:

1.信号量 ----来描述 可使用的资源的个数

    • buf[1024] //公共资源 //buf2[1024] 写线程 ---写资源 可以写数据 的条件

    • 1.开始时 ,buf空的 2.读线程 读完了 读线程 //buf充当读资源 //1.一开始,buf中没有数据可读的

    • 1.写线程结束 信号量的机制: 1.信号量 --- 来描述 可使用的资源的个数

    • 2.P操作 表示 使用这个资源 资源个数减 1 p操作逻辑 尝试获取资源, 有资源可用,直接使用,资源个数减一 如果没有资源可用,此时等待

    • 3.V操作 表示 产生这个资源 资源个数加 1

    • 总结:

      共享进程资源 方便

      线程 抢占公共资源 带来的问题

      1.互斥访问

      需要互斥锁来保证原子性操作 使操作过程完整

      互斥锁:

      a.初始化 锁 b.加锁 c.解锁 d.销毁锁

      死锁问题解决方法:

      1.对于线程的信号量死锁的处理,在线程结束时记得给另外一个在等待的信号量一个,结束信号的量,对于线程来说,信号量的逻辑优先级是最高的。

      所以 1)逻辑上有循环的话,信号量的判断应该在循环内。2)需要结束进程时,已经结束的信号量需要进行操作,(主要在循环中)使其他在等待的信号量获得一个它已经结束的信息。

      进程间的通信

      进程创建好之后,父子进程之间相互独立

      7种进程的通信:

      管道:1)无名管道,管道空间是有限的。管道大小为 65536字节 64k 2)管道操作特点:数据读走之后,认为就没了,3)管道如果为空,此时可以一只写,直到写满

      管道的创建 (!!!切忌,别创建在进程之后,也就是fork之后)

    • 整个过程为 创建和判断的过程 pipe()这个过程为创建过程

    • 无名管道的创建:理解成单通道,只创建在fork之前,创建在fork之后的单通道双向通信,要解决一个时序的问题,因为父进程和子进程是同时进行的,通过一个通道互发信息的话,当双方同时发信息时会发生冲突。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值