进程间通信(下)命令行操作篇

1.命令:

ipcs  -q    //查看当前存在的消息队列

ipcs  -m   //查看当前存在的共享内存块

ipcs  -s    //查看当前存在的信号量数组

ipcrm  -q   msqid  //删除当前存在的消息队列

ipcrm  -m   shmid //删除当前存在的共享内存块

ipcrm  -s  semid //删除当前存在的信号量数组

 2.同步与互斥

信号量:不要求忙等的同步互斥工具。

一种信号量表示一种资源,信号量的值表示可用资源的个数。

做法:

当资源不可用时,进程将阻塞(避免忙等)(加入阻塞队列),直到另一进程释放资源时才被唤醒。

信号量s只能被下面的两个原语访问:          

 #semWait(s)                也称作P(s)操作,wait(s)            ——本进程请求分配一个资源            

#semSignal(s)              也称作V(s)操作,signal(s)         ——本进程释放一个资源        

 注意:  P、V操作必须成对出现。        ·

1.用于互斥时,位于同一进程内,临界区前后;    

2.用于同步时,交错出现于两个合作进程内;        

3.多个P、V操作的次数不能颠倒,否则可能导致死锁;

4.用于同步的P操作应出现在用于互斥的V操作之前;    

5.多个V操作操作的次序可任意

#用于互斥时,s的初值为1,取指为1~(n-1)。  

 s=1时:有一个临界资源可用,一个进程可进入临界区。  

 s=0时:临界资源已分配,一个进程已进入临界区。    

 s<0时:临界区已被占用,|s|个阻塞进程正在等待进入。

#用于同步时,s初值将>=0  

 s>=0:可用资源个数(或可进入临界区的进程个数)。    

 s<0    :  该资源的等待队列长度(阻塞进程个数)。

 #强信号量:唤醒一个阻塞进程并移出阻塞队列时,采用FIFO移出策略的信号量。

 #弱信号量:唤醒一个阻塞进程并移出阻塞队列时,采用随机选择移出策略的信号量。

3.生产者消费者原理

     一个生产者进程和一个消费者进程共用一个有sizeof(buffer)个字节缓冲区的缓冲池来交换数据(有限缓冲)。

     缓冲池一次只能让一个进程访问。(互斥)          设一信号量s,初值为1;        

     生产者需要空缓冲来发送数据。(同步)         设一信号量empty,初值为sizeofbuffer;     

     消费者需要满缓冲来获取数据。(同步)            设一信号量full,初值为0;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值