进程间的交互

进程间的交互包括竞争和协作。竞争可能导致死锁,如哲学家进餐问题,而协作需要进程同步,如生产者消费者问题。信号量是解决这些问题的关键,通过p和v操作实现资源的获取和释放。例如,生产者消费者问题中,使用互斥信号量mutex、empty和full来协调生产和消费,避免资源冲突。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

进程间的交互分为竞争关系、协作关系。

1、竞争关系

由于计算机内资源有限,或者说某几个进程必须共享某些资源与变量,这时候就不可避免的会出现竞争,进程的相互竞争就会穿死锁和饥饿问题,饥饿问题已解释。

死锁问题是指一组进程如果都获得了部分资源,还想要得到其他进程占用的资源,最终所有进程都将陷入死锁,即都在等待,每个进程都不会先放手自己占有的资源。

进程互斥:若干进程在使用共享资源的时候,其他进程必须等待正在使用的进程释放该进程,临界区管理是解决进程互斥问题的办法。

2、协作关系

某些任务需要很多进程为其分工来完成,这时候需要协调互相之间的关系,比如某个进程在进行到某个点之后需要等待某些进程的消息和信号才能继续执行。(进程同步。

临界区:并发进程中与共享变量有关的程序段叫“临界区”。

临界资源:共享变量代表的资源叫做“临界资源”。

临界区调度原则:空闲让进、忙则等待、有限等待、让权等待。

3、信号量解决

p表示获取资源,一般会跟value--,v表示释放资源,后接value++。p、v一定是成对出现在同一个进程之中,否则会出现资源泄漏。

经典问题:哲学家进餐问题、生产者消费者问题、读写者问题、理发师问题。

哲学家进餐问题:五个哲学家围坐一张圆桌,桌上仅有五根筷子,每位哲学家只能拿起与他相邻的两根筷子吃饭。五根筷子都是临界资源

设为:semaphore fork[5] = {1,1,1,1,1};

philosopher_i()

while(true){

{think()};

p(fork[i]);

p(fork[(i+1)%5]);

{eat()};

v(fork[i]);

v(fork[(i+1)%5]);

}

此法会造成死锁问题,比如五个哲学家进程同时启动,则在申请第二个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值