进程的同步与互斥_legend

本文深入探讨了进程同步与互斥的概念,包括临界资源的定义与访问方式,信号量的操作及其在同步互斥事件中的应用。通过具体案例如生产者消费者问题、读者写者问题等,展示了如何利用信号量解决实际问题。

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



进程同步与互斥:
(一)临界资源:

(1)定义:
一次只允许一个进程访问的资源为临界资源。
临界区:访问临界资源的那段区域为临界区。
(2)临界资源的访问:
将临界资源的访问分为四个部分:
进入区-》临界区-》退出区-》剩余区。

(二)进程同步:
两个进程之间相互协作,事件之间有先后顺序关系。

(三)进程互斥:
两个或多个进程对临界资源的使用,只能是一个使用,一个等待。

(四)信号量(Semaphore):
(1)信号量的定义:

方法一:整形信号量
int s;表示资源个数。

方法二:结构体信号量:
typedef struct Semaphore {
 int value;//系统中某类可用资源的个数
 Queue waitQueue;//等待队列
}
当value>0,表示系统中可用资源的个数;
当value<0,表示请求该类资源而处于阻塞状态的进程个数为|value|,即waitQueue的实际大小。

(2)P操作:申请资源/接受信号

1. s.value--;
2. 若s.value>=0,则继续执行,否则(s.value<0)阻塞该进程,并将该进程插入到该信号量的等待队列中。

(3)V操作:释放资源/发送信号
1. s.value++;
2. 若s.value>0,则进程继续执行,否则(s.value<=0),从该信号量的等待队列中移除第一个进程,使之变成就绪进程并插入到就绪队列中,然后返回到原来的进程继续执行。

(3)同步,互斥事件的P,V操作:
1.同步事件:即先执行事件1,然后执行事件2;
则:事件1-》V-》P-》事件2

2.P,V保护临界资源;
即:P->临界资源->V


(五)经典进程同步互斥问题:
(1)生产者消费者问题:
http://blog.youkuaiyun.com/legend050709/article/details/39031833

(2)读者写者问题:
http://blog.youkuaiyun.com/legend050709/article/details/39032873

(3)理发师睡眠问题:
http://blog.youkuaiyun.com/legend050709/article/details/39033517

(4)哲学家进餐问题:
http://blog.youkuaiyun.com/legend050709/article/details/39034021


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值