进程间通信

一、信息量

1.信息量:线程间有序的进行工作

2.资源个数:描述可使用资源的个数

3.操作:p操作:使用这个资源,表示资源个数减1

              v操作:产实这个资源,表示资源个数加1

              p操作逻辑:尝试获取资源,有资源可用直接使用,资源减1,如果没1,继续等待

              v操作逻辑:释放一个资源,如果此时有任务在等待资源直接使用

4.信号量定义:sem_t    sem    创造一类资源

   初始化:sem_init(sem_t   *sem,int   pshared, unsigned   int   value);

               功能:将已经定义好的信号量赋值

                参数:sem    要初始化的信号量

                pshared = 0     表示线程间使用信号量

                           !=0       表示进程间使用信号量

                value   信号量的初始值,一般无名信号量   0或1

成功返回0          失败返回-1

5.信号量的pv操作:

     sem   wait()判断当前信号量是否有资源可用           /               sem    post()释放资源

 参数均为要操作的信号量             成功返回0           失败返回-1

6.信号量销毁:sem_destroy()      参数:&sem

7.总结:共享进程资源方便     线程抢占公共资源带来的问题

           1.互斥访问:需要互斥锁,来保障原子性操作 

            2.有顺序的进行访问:信号量机制,核心操作:pv

二、进程间的通信

进程创建之后。父子进程的空间相互独立

1. 古老通信方式:    管道:       无名管道              有名管道

                                  信号

2.ipc对象通信:消息队列           共享内存      信号量集

3.socket通信     网络通信,用于不同主机间

4.无名管道:   pipe(int    pipe   fd[2])            创建一个无名管道

            参数:pipe   fd   用来获取管道两端    读端:fd[0]          写端:fd[1]

                成功返回0         失败错误码

5.管道特点:  最大64k.65536个字节

    数据读完后就会消失

   写端存在,读端也存在:管道若为空,则一直写直到写满

   写端存在,读端不存在:导致管道破裂,收到信号SIGPIPE,使程序结束

   写端存在,读管道:可以读,如果没有数据,此时读操作阻塞

   写端不存在,读管道:可以读,如果没有数据,读操作不阻塞   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值