线程 哲学者吃饭 2018-05-14

哲学者吃饭:用来表示在并行计算中多线程同步时产生的问题,就可以抽象成是资源抢占问题,而筷子就是“资源”。

哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的筷子,永远都在等右边的筷子。即使没有死锁,也可能发生资源耗尽。

死锁:是指两个或者两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,都将无法推进去。称系统处于死锁状态或系统产生死锁。

触发死锁的四个条件:

1) 互斥条件:线程对资源的访问是排他性,如果一个线程对占用了某资源,那么其他线程则必须处于等待的状态,知道资源被释放

2) 请求和保持条件

3) 不剥夺条件

4) 环路等待条件

而产生死锁的原因:

1) 因为系统资源不足

2) 进程运行推进的顺序不合适

3) 资源分配不当等

活锁:是指线程1可以使用资源,同时可以让其他线程先使用资源,线程2也可以使用资源,同时也可以让其他线程先使用资源,互相谦让,最后两个线程都无法使用资源。

问题解法:

1) 服务生解法:引人一个餐厅服务生,哲学家需经过他的允许才可以使用,因为服务生知道哪只餐叉正在使用,避免死锁

2) 资源分级解法:为资源分配一个偏序或者分级的关系,并约定所有资源都按照这个顺序获取,按相反顺序释放,可以保证不会有两个无关资源同时被同一项工作所需要。

3) Chandy/Misra解法

你可能感兴趣的:(线程 哲学者吃饭 2018-05-14)