美文网首页
线程 哲学者吃饭 2018-05-14

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

作者: 码记 | 来源:发表于2018-05-14 21:04 被阅读0次

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

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

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

    触发死锁的四个条件:

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

    2) 请求和保持条件

    3) 不剥夺条件

    4) 环路等待条件

    而产生死锁的原因:

    1) 因为系统资源不足

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

    3) 资源分配不当等

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

    问题解法:

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

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

    3) Chandy/Misra解法

    相关文章

      网友评论

          本文标题:线程 哲学者吃饭 2018-05-14

          本文链接:https://www.haomeiwen.com/subject/rrqsdftx.html