auto commit

This commit is contained in:
CyC2018 2018-03-08 22:13:11 +08:00
parent 793840a9d4
commit 5f84c9585a

View File

@ -46,7 +46,7 @@
* [1. 读者-写者问题](#1-读者-写者问题)
* [2. 哲学家进餐问题](#2-哲学家进餐问题)
* [第三章 死锁](#第三章-死锁)
* [死锁的条件](#死锁的条件)
* [死锁的必要条件](#死锁的必要条件)
* [死锁的处理方法](#死锁的处理方法)
* [1. 鸵鸟策略](#1-鸵鸟策略)
* [2. 死锁预防](#2-死锁预防)
@ -344,12 +344,12 @@ monitor ProducerConsumer
procedure insert();
begin
// ...
end;
procedure remove();
begin
// ...
end;
end monitor;
```
@ -371,7 +371,7 @@ monitor ProducerConsumer
if count = N then wait(full);
insert_item(item);
count := count + 1;
if count = 1 ten signal(empty);
if count = 1 then signal(empty);
end;
function remove: integer;
@ -416,13 +416,13 @@ Linux 中管道是通过空文件来实现。
管道有三种:
1. 普通管道:有两个限制:一是只支持半双工通信方式,即只能单向传输;二是只能在父子进程之间使用;
1. 普通管道:有两个限制,一是只能单向传输;二是只能在父子进程之间使用;
2. 流管道:去除第一个限制,支持双向传输;
3. 命名管道:去除第二个限制,可以在不相关进程之间进行通信。
### 2. 信号量
信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其它进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其它进程也访问该资源。主要作为进程间以及同一进程内不同线程之间的同步手段。
### 3. 消息队列
@ -434,7 +434,9 @@ Linux 中管道是通过空文件来实现。
### 5. 共享内存
共享内存就是映射一段能被其它进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其它 IPC 运行效率低而专门设计的。它往往与其它通信机制(如信号量)配合使用,来实现进程间的同步和通信。
共享内存就是映射一段能被其它进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。
共享内存是最快的 IPC 方式,它是针对其它 IPC 运行效率低而专门设计的。它往往与其它通信机制(如信号量)配合使用,来实现进程间的同步和通信。
### 6. 套接字
@ -442,7 +444,7 @@ Linux 中管道是通过空文件来实现。
## 经典同步问题
生产者和消费者问题前面已经讨论过。
生产者和消费者问题前面已经讨论过
### 1. 读者-写者问题
@ -506,7 +508,7 @@ void philosopher(int i) {
}
```
为了防止死锁的发生,可以加一点限制,只允许同时拿起左右两边的筷子方法是引入一个互斥量,对拿起两个筷子的那段代码加锁。
为了防止死锁的发生,可以加一点限制,只允许同时拿起左右两边的筷子方法是引入一个互斥量,对拿起两个筷子的那段代码加锁。
```c
semaphore mutex = 1;
@ -529,16 +531,15 @@ void philosopher(int i) {
# 第三章 死锁
## 死锁的条件
## 死锁的必要条件
<div align="center"> <img src="../pics//c037c901-7eae-4e31-a1e4-9d41329e5c3e.png"/> </div><br>
1. 互斥
2. 请求与保持
3. 不可抢占
4. 环路等待
1. 互斥:每个资源要么已经分配给了一个进程,要么就是可用的。
2. 占有和等待:已经得到了某个资源的进程可以再请求新的资源。
3. 不可抢占:已经分配给一个进程的资源不能强制性地被抢占,它只能被占有它的进程显示地释放。
4. 环路等待:有两个或者两个以上的进程组成一条环路,该环路中的每个进程都在等待下一个进程所占有的资源。
其中,请求与保持是指一个进程因请求资源而阻塞时,对已获得的资源保持不放。
## 死锁的处理方法