diff --git a/source/chapter8/5concurrency-problem.rst b/source/chapter8/5concurrency-problem.rst index 26692c1c..0e76d0c3 100644 --- a/source/chapter8/5concurrency-problem.rst +++ b/source/chapter8/5concurrency-problem.rst @@ -250,7 +250,7 @@ Need[i,j] = Max[i,j] - allocation[i, j] 安全性检查算法如下: -1. 设置两个向量:工作向量Work,表示操作系统可提供给线程继续运行所需的各类资源数目,它含有m个元素,初始时,Work = Available;结束向量Finish,表示系统是否有足够的资源分配给线程,使之运行完成。初始时 Finish[0..n-1] = false,表示所有线程都没结束;当有足够资源分配给线程时,设置Finish[i] = true。 +1. 设置两个向量:工作向量Work,表示操作系统可提供给线程继续运行所需的各类资源数目,它含有m个元素,初始时,Work = Available;结束向量Finish,表示系统是否有足够的资源分配给线程,使之运行完成。初始时 Finish[0..n-1] = false,表示所有线程都没结束;当有足够资源分配给线程时,设置Finish[i] = true。 2. 从线程集合中找到一个能满足下述条件的线程 .. code-block:: Rust @@ -274,4 +274,4 @@ Need[i,j] = Max[i,j] - allocation[i, j] 4. 如果Finish[0..=n-1] 都为true,则表示系统处于安全状态;否则表示系统处于不安全状态。 -通过操作系统调度,如银行家算法来避免死锁不是广泛使用的通用方案。因为从线程执行的一般情况上看,银行家算法需要提前获知线程总的资源申请量,以及未来的每一次请求,而这些请求对于一般线程而言在运行前是不可知或随机的。另外,即使在某些特殊情况下,可以提前知道线程的资源申请量等信息,多重循环的银行家算法开销也是很大的,不适合于对性能要求很高的操作系统中。 \ No newline at end of file +通过操作系统调度,如银行家算法来避免死锁不是广泛使用的通用方案。因为从线程执行的一般情况上看,银行家算法需要提前获知线程总的资源申请量,以及未来的每一次请求,而这些请求对于一般线程而言在运行前是不可知或随机的。另外,即使在某些特殊情况下,可以提前知道线程的资源申请量等信息,多重循环的银行家算法开销也是很大的,不适合于对性能要求很高的操作系统中。