Peterson算法是实现进程互斥访问临界区的一种方法,避免了单标志法必须交替访问的限制,以及双标志法后检验的“饥饿”问题。

Peterson算法实现如下:

//操作系统 临界区互斥Peterson's Algorithm算法思考Pi:
flag[i] = ture; turn = j;
while (flag[j] && turn == j);
critical section;// 访问临界区
flag[i] = false;
remainder section;// 剩余区Pj:
flag[j] = true; turn = i;
while (flag[i] && turn == i);
critical sectionl// 访问临界区
flag[j] = false;
remainder section;// 剩余区

这里实现进程互斥,首先设置flag布尔数组用来判断进程是否想要进入临界区,若flag[i]==ture则Pi进程想要进入临界区;

设置turn变量的用途是用来实现对想要进入临界区的进程的一个排序;

若Pi和Pj都想进入临界区,i先提出申请,j后提出申请,进入while循环判定时turn==i(Pi执行turn=j在前,Pj执行turn=i在后,所以while循环中的turn==i);先提出申请的进程先进入临界区;Pi走到while循环,此时flag[j]==true,turn==i,不满足循环条件,跳出(若是Pj不想进入临界区压根就没有提出申请,那么flag[j]==false,更不满足循环条件),Pi就可以继续进入critical section;Pj走到while循环,但是因为此时flag[i]==ture且turn==i,Pj陷入while循环中无法进入critical section,Pj需要一直等到Pi退出临界区时置flag[i]==false才能跳出循环,进入临界区;

所以设置两个变量一个规则,flag数组为了判定是否有其他进程想要进入临界区(避免如果没有其他进程想要进入,当前进程一直空等),turn变量为想要进入临界区的进程进行排序(turn==i则Pj在前,turn==j则Pi在前),先提出申请的进程优先进入临界区,其他进程等待,就这样实现了对临界区访问的互斥。

Peterson‘s Algorithm皮特森算法详解相关推荐

  1. Peterson‘s Algorism皮特森算法详解

    本文将flag比作进入临界区的意向,turn比作访问请求.对于线程0,turn=j表达了访问请求. flag[i] = TRUE将自身的访问位置为1,turn = j 向对方发出访问请求: 对于线程0 ...

  2. Manacher Algorithm马拉车算法详解

    Manacher Algorithm马拉车算法详解 链接:https://www.zhihu.com/question/37289584/answer/465656849 中心扩展算法 我们先来看一个 ...

  3. peterson算法p0流程图_Peterson's Algorism皮特森算法详解

    Peterson算法是实现进程互斥访问临界区的一种方法,避免了单标志法必须交替访问的限制,以及双标志法后检验的"饥饿"问题. Peterson算法实现如下: Pi进程: flag[ ...

  4. 排序算法,最全的10大排序算法详解(Sort Algorithm)

    文章目录 排序算法,最全的10大排序算法详解(Sort Algorithm) 排序算法分类 排序算法稳定性 时间复杂度(time complexity) 1#时间复杂度的意义 2#基本操作执行次数 如 ...

  5. 极限定律 My Algorithm Space AC自动机算法详解

    转载自:http://www.cppblog.com/mythit/archive/2009/04/21/80633.html 首先简要介绍一下AC自动机:Aho-Corasick automatio ...

  6. 图论-最短路Dijkstra算法详解超详 有图解

    整体来看dij就是从起点开始扩散致整个图的过程,为什么说他稳定呢,是因为他每次迭代,都能得到至少一个结点的最短路.(不像SPFA,玄学复杂度) 但是他的缺点就是不能处理带负权值的边,和代码量稍稍复杂. ...

  7. C++中的STL算法详解

    1.STL算法详解 STL提供能在各种容器中通用的算法(大约有70种),如插入.删除.查找.排序等.算法就是函数模板,算法通过迭代器来操纵容器中的元素.许多算法操作的是容器上的一个区间(也可以是整个容 ...

  8. Popular Cows POJ - 2186(tarjan算法)+详解

    题意: 每一头牛的愿望就是变成一头最受欢迎的牛.现在有 N头牛,给你M对整数(A,B),表示牛 A认为牛B受欢迎.这种关系是具有传递性的,如果 A认为 B受欢迎, B认为 C受欢迎,那么牛 A也认为牛 ...

  9. md5与des算法有何不同_Python算法详解:为什么说算法是程序的灵魂?

    算法是程序的灵魂,只有掌握了算法,才能轻松地驾驭程序开发.软件开发工作不是按部就班,而是选择一种最合理的算法去实现项目功能.算法能够引导开发者在面对一个项目功能时用什么思路去实现,有了这个思路后,编程 ...

最新文章

  1. 慧鱼机器人编程语言的特点_慧鱼机器人课程设计报告.doc
  2. 【错误记录】VMware 虚拟机报错 ( 向 VMWare 虚拟机中的 Ubuntu 系统拷贝文件时磁盘空间不足 )
  3. Linux操作系统下如何编译安装源码包软件
  4. css3 奇技淫巧 - 如何给小汽车换个背景色谈起
  5. Base64加密---加密学习笔记(一)
  6. 分类素材(part4)--大话Python机器学习(上)
  7. [Java]Thinking in Java 练习2.12
  8. 迁移TFS 2012服务至新的电脑硬件
  9. python移动端web开发代码_移动web前端开发,前端开发工作总结,移动端页面开发-我主页-一个前端程序猿的博客...
  10. 停止做这7件事,你的工作效率至少翻一倍!
  11. excel删除重复数据保留一条_Excel一键删除重复数据,你居然还用逐条排查?
  12. 手机电源键关不了屏幕_没有home键iphone强关机,关机你会吗?小的快来!
  13. python简明教程_07
  14. 瑞数信息的“狩猎术”
  15. python爬虫抓取头条街拍美女图片
  16. perl的Math::Combinatorics模块实现全排列
  17. 2021年美容师(中级)证考试及美容师(中级)操作证考试
  18. 英式音标26字母(A-G)
  19. owncloud config.php,【ownCloud】添加信任域
  20. java字符序列_字符序列(CharSequence)

热门文章

  1. options请求(跨域预检)
  2. S7-200SMART_MODBUS RTU通信轮询中实现插队写入或条件写入的具体方法示例(1)
  3. 迷你世界 Java_迷你世界0.42.1版本
  4. random模拟随机发红包
  5. Linux创建文件的5种方式
  6. mac不识别外置硬盘如何解决
  7. 基于Echarts+HTML5可视化数据大屏展示—大数据运维总览图
  8. html手抄报怎么制作,手抄报 | 怎样做一张漂亮的手抄报
  9. 鸿蒙系统将应用于什么手机,首款能“应用在汽车上”的手机系统来了!华为鸿蒙将给汽车业带来什么变化?| 中国汽车报...
  10. Hadoop之SSH无密登录配置