有没有做美食的视频网站,毕业设计网站用什么做,怎样注册公司邮箱账号,成都响应网站建设文章目录2.3.2 进程互斥的软件实现方法2.3.2.1 单标志法2.3.2.2 双标志先检查法2.3.2.3 双标志后检查法2.3.2.4 Peterson算法2.3.2.5 小结2.3.2 进程互斥的软件实现方法
知识总览 2.3.2.1 单标志法
单标志法的算法思想是#xff1a;两个进程在访问完临界区后会把使用临界区的…
文章目录2.3.2 进程互斥的软件实现方法2.3.2.1 单标志法2.3.2.2 双标志先检查法2.3.2.3 双标志后检查法2.3.2.4 Peterson算法2.3.2.5 小结2.3.2 进程互斥的软件实现方法
知识总览 2.3.2.1 单标志法
单标志法的算法思想是两个进程在访问完临界区后会把使用临界区的权限转交给另一个进程。也就是说每个进程进入临界区的权限只能被另一个进程赋予。具体实现过程如下 对于turn表示当前允许进入临界区的进程号而只有当前允许进入临界区的进程在访问了临界区之后才会修改turn的值。也就是说对于临界区的访问一定是按p0→p1→p0→p1…这样轮流访问。
这种必须轮流访问带来的问题是如果此时允许进入临界区的进程是P0而P0一直不访问临界区那么虽然此时临界区空闲但是并不允许P1访问。因此对于单标志法其违背了空闲让进的原则。
2.3.2.2 双标志先检查法
双标志先检查法的算法思想是设置一个布尔型数组flag[]数组中各个元素用来标记各进程想进入临界区的意愿比如flag[0] true意味着0号进程p0现在想要进入临界区。每个进程在进入临界区之前先检查当前有没有别的进程想进入临界区如果没有则把自身对应的标志flag[i]设为true之后开始访问临界区。 需要注意的是如果按照152637的顺序执行p0和p1将会同时访问临界区。因此对于双标志先检查法其违背了忙则等待的原则。
之所以造成这种问题就是因为进入区的检查和上锁不是原子操作在检查完的下一步还没上锁很有可能发生其他事件。
2.3.2.3 双标志后检查法
既然在前一个算法中原因出在先检查后上锁那我们调换一下顺序能否改变情况呢
双标志后检查法的思想是既然先检查后上锁不行那我就先上锁然后在检查。 需要注意的是如果按照1526的顺序执行p0和p1将都无法进入临界区。
因此双标志后检查法虽然解决了忙则等待的问题但是又违背了空闲让进和有限等待原则因为如果各进程都长期无法访问临界资源会产生饥饿现象。
2.3.2.4 Peterson算法
在双标志后检查法中两个进程都争着想进入临界区但是谁也不让谁既然这样那只需要有人礼让即可解决问题。 如果按照123678的顺序则相当于串行执行这种方式肯定可以执行。
如果按照162378的顺序那么进程0表明自己想进入临界区进程1表明自己想进入临界区回到2步骤0进程表示愿意先让给1进程执行然后在检查1也有意愿进入临界区和自己已经让位的情况下自己处于等待状态。这时候回到7步骤1号进程也表示自己愿意先让给0进程执行然后在检查0也有意愿进入临界区和自己已经让位的情况下自己也处于等待状态。此时回到步骤30号进程发现turn被修改为0了说明自己可以不用等待让位了先行一步作为后回到步骤8进程P1也顺利做完了。
尽管Peterson算法用软件方法解决了进程互斥问题遵循了空闲让进、忙则等待、有限等待三个原则但是依然未遵循让权等待原则。但是相较于前面三种算法其本身已然是最好。
2.3.2.5 小结