对于互斥算法,主要有两种,一种是DEKKER算法,另一种是PETERSON算法,这一篇主要来说PETERSON算法。

相比于DEKKER算法,PETERSON算法也解决了互斥访问问题,并且不需要像DEKKER算法一样强制轮流访问,可以正常的顺序进行工作,它的原理如下:

//进程i
enter_region(i);//这个函数用于判断和决定进程i什么时候能进入临界区
临界区
leave_region(i);//出了临界区之后进行一定的操作

PETERSON算法只要是调用了两个函数enter_region(i)和leave_region(i)函数来判断什么时候这个进程能进入临界区,什么时候不能进入,以及出了临界区要做什么操作。

那么具体的两个函数我们看一下:

#define FALSE 0
#define TRUE 1
#define N 2
int turn; //用于决定轮到谁访问临界区
int interest[N];//表示哪个进程有兴趣进入临界区
void enter_region(int process){int other = 1 - process;//process是进程号,1-process表示另一个进程的进程号interest[process] = true;//表示这个进程希望进入临界区turn = process;while(turn == process && interest[other] == true);}
//之后是访问临界区的代码...临界区//之后是出了临界区要进行的操作
void leave_region(int process){interest[process] = false;
}

那么这两个函数怎么做到互斥访问的呢?首先看enter_region函数。因为一共就两个进程,当0进程进入enter_region的时候,首先确定1进程也想进临界区。0进程吧自己的interest[0]置为true且turn = 0表示自己该进临界区了,此时被切换下CPU,1进程上。1进程同样也做了如此操作,把turn又改成了1.那么他自然而然就陷入了后面的死循环直到时间片用完。然后0进程上CPU,他发现此时turn == 1所以就没有进入死循环,直接就结束enter_region进入了临界区。然后leave_region将自己的interest[0]改成false表示自己不想再进了。 当1进程上CPU的时候因为interest[other]已经被0进程改成了false,所以也结束了死循环,开始访问临界区。

这样Peterson算法就保证了访问互斥临界区的安全性。

PETERSON互斥算法解析相关推荐

  1. Dekker互斥算法解析

    引入Dekker互斥算法解决的是多进程访问一个临界区的保护问题和"after you"问题. 我们首先来看,两个进程访问一段临界区的互斥问题: //P进程如下: pturn = t ...

  2. 回归算法分类,常用回归算法解析

    回归算法分类,常用回归算法解析 回归是数学建模.分类和预测中最古老但功能非常强大的工具之一.回归在工程.物理学.生物学.金融.社会科学等各个领域都有应用,是数据科学家常用的基本工具. 回归通常是机器学 ...

  3. CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020)

    CVPR目标检测与实例分割算法解析:FCOS(2019),Mask R-CNN(2019),PolarMask(2020) 目标检测:FCOS(CVPR 2019) 目标检测算法FCOS(FCOS: ...

  4. 10没有基于策略的qos_分布式QoS算法解析

    QoS对于服务多租户多业务的整体系统来说,不管对网络还是存储,都格外重要,没有QoS,会造成不同租户及业务之间对资源的抢占,用户A用爽了,用户B却遭了殃,频频投诉,这是系统管理员最头疼的事情.我们今天 ...

  5. python终结一个循环额_Python语言入门之内存管理方式和垃圾回收算法解析

    本文主要向大家介绍了Python语言入门之内存管理方式和垃圾回收算法解析,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 在列表,元组,实例,类,字典和函数中存在循环引用问题.有 ...

  6. 脑机接口主流算法解析课程视频汇总

    目录 讲座1--SSVEP算法解析 讲座2--ERP/P300算法解析 讲座3--运动想象算法解析 讲座4--情感脑机接口算法解析 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流 ...

  7. yolo类检测算法解析——yolo v3

    原文:https://www.cnblogs.com/cvtoEyes/p/8608205.html yolo类检测算法解析--yolo v3 计算机视觉的发展史可谓很长了,它的分支很多,而且理论那是 ...

  8. 【机器学习】通俗的元胞自动机算法解析和应用

    [机器学习]通俗的元胞自动机算法解析和应用 文章目录 1 元胞自动机的定义 2 元胞自动机的组成 3 元胞自动机的特征 4 Python实现元胞自动机(生命游戏) 5 总结 6 Github(华盛顿州 ...

  9. 【机器学习】树回归和聚类算法解析和应用

    [机器学习]树回归和聚类算法解析和应用 文章目录 1 树回归 2 CART ( Classification And Regression Tree) 分类回归树 3 K-means3.1 合理选择 ...

最新文章

  1. lzma打包exe_Web 项目打包EXE
  2. react 原生html 插件,纯原生JS的瀑布流插件Macy.js,前端必备插件
  3. 【Android-NCNN-Vulkan】记录一次ncnn-vulkan在低性能开发板上出现的native内存溢出的问题
  4. Linux的Xshell连接Centos7能Ping通但无法连接问题[ssh(d)+firewall(d)]【转载转载转载】
  5. Codeblocks 开发板调试简单教程
  6. 百度推广为什么出现在右侧
  7. POJ1260-Pearls
  8. FRR BGP 协议分析 5 -- 路由更新(2)
  9. 91 卫图与bigemap地图下载器功能对比
  10. 【领英如何一键批量有效地加好友?】
  11. Mysql各版本驱动包
  12. android 短信打开APP
  13. Hazel引擎学习(十一)
  14. 微信云开发-事件触发器的使用
  15. mybatis-plus Invalid bound statement (not found)
  16. win2008文件储存服务器,win server 2008 文件服务器
  17. 士兵队列训练问题(队列)
  18. b+树时间复杂度_前端大神用的学习笔记:线段树和树状数组
  19. 理财小工具(二)贷款计算器
  20. 服务器操作系统安装命令,安装windows server 2008r2服务器操作系统

热门文章

  1. 怎样学好python编程-3个月学好Python有多简单?
  2. python电脑版-mPython
  3. 开课吧python小课学了有用吗-这个神仙技能,让你为所欲为!速来 !
  4. python安装-Python uWSGI 安装配置
  5. python下载哪个版本好-究竟哪个版本的Python是最快的?
  6. python全套教程-老王Python全套教程完整版
  7. 语音识别技术的发展历程,语音识别是如何工作的?语音识别资料概述
  8. 解决font-weight:600在安卓机不生效的方法
  9. java index.jsp为什么不默认跳转_Java开发人员怎么面试 常见Redis面试题有哪些
  10. java点击上传上传mysql并显示图片_java + mysql + jdbc实现图片上传