auto commit

This commit is contained in:
CyC2018
2018-03-08 21:56:48 +08:00
parent bfc45601c7
commit 793840a9d4

View File

@ -241,7 +241,7 @@ shortest remaining time nextSRTN
### 3. 实时系统中的调度 ### 3. 实时系统中的调度
实时系统要一个服务请求在一个确定时间内得到响应。 实时系统要一个服务请求在一个确定时间内得到响应。
分为硬实时和软实时,前者必须满足绝对的截止时间,后者可以容忍一定的超时。 分为硬实时和软实时,前者必须满足绝对的截止时间,后者可以容忍一定的超时。
@ -261,9 +261,8 @@ shortest remaining time nextSRTN
### 2. 同步与互斥 ### 2. 同步与互斥
同步指多个进程按一定顺序执行;互斥指多个进程在同一时刻只有一个进程能进入临界区。 - 同步指多个进程按一定顺序执行;
- 互斥指多个进程在同一时刻只有一个进程能进入临界区。
同步是在对临界区互斥访问的基础上,通过其它机制来实现有序访问的。
### 3. 信号量 ### 3. 信号量
@ -294,9 +293,13 @@ void P2() {
**使用信号量实现生产者-消费者问题** **使用信号量实现生产者-消费者问题**
使用一个互斥量 mutex 来对临界资源进行访问empty 记录空缓冲区的数量full 记录满缓冲区的数量 使用一个缓冲区来保存物品,只有缓冲区没有满,生产者才可以放入物品;只有缓冲区不为空,消费者才可以拿走物品
注意,必须先执行 down 操作再用互斥量对临界区加锁,否则会出现死锁。因为如果都先对临界区加锁,然后再执行 down 操作,那么可能会出现这种情况:生产者对临界区加锁后,执行 down(empty) 操作,发现 empty = 0此时生成者睡眠。消费者此时不能进入临界区因为生产者对临界区加锁了也就无法执行 up(empty) 操作,那么生产者和消费者就会一直等待下去 需要使用一个互斥量 mutex 来对缓冲区这个临界资源进行互斥访问
为了控制生产者和消费者的行为需要记录缓冲区中物品的数量。数量可以使用信号量来进行统计这里需要使用两个信号量empty 记录空缓冲区的数量full 记录满缓冲区的数量。其中empty 信号量是在生产者进程中使用,当 empty 不为 0 时生产者才可以放入物品full 信号量是在消费者进行中使用,当 full 信号量不为 0 时,消费者才可以取走物品。
注意,不能先对缓冲区进行加锁,再测试信号量。也就是说,不能先执行 down(mutex) 再执行 down(empty)。如果这么做了,那么可能会出现这种情况:生产者对缓冲区加锁后,执行 down(empty) 操作,发现 empty=0此时生成者睡眠。消费者此时不能进入临界区因为生产者对缓冲区加锁了也就无法执行 up(empty) 操作,那么生产者和消费者就会一直等待下去。
```c ```c
#define N 100 #define N 100