哲学者吃饭:用来表示在并行计算中多线程同步时产生的问题,就可以抽象成是资源抢占问题,而筷子就是“资源”。
哲学家从来不交谈,这就很危险,可能产生死锁,每个哲学家都拿着左手的筷子,永远都在等右边的筷子。即使没有死锁,也可能发生资源耗尽。
死锁:是指两个或者两个以上的线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,都将无法推进去。称系统处于死锁状态或系统产生死锁。
触发死锁的四个条件:
1) 互斥条件:线程对资源的访问是排他性,如果一个线程对占用了某资源,那么其他线程则必须处于等待的状态,知道资源被释放
2) 请求和保持条件
3) 不剥夺条件
4) 环路等待条件
而产生死锁的原因:
1) 因为系统资源不足
2) 进程运行推进的顺序不合适
3) 资源分配不当等
活锁:是指线程1可以使用资源,同时可以让其他线程先使用资源,线程2也可以使用资源,同时也可以让其他线程先使用资源,互相谦让,最后两个线程都无法使用资源。
问题解法:
1) 服务生解法:引人一个餐厅服务生,哲学家需经过他的允许才可以使用,因为服务生知道哪只餐叉正在使用,避免死锁
2) 资源分级解法:为资源分配一个偏序或者分级的关系,并约定所有资源都按照这个顺序获取,按相反顺序释放,可以保证不会有两个无关资源同时被同一项工作所需要。
3) Chandy/Misra解法
网友评论