面包店算法带有代码的详细讲解
现实中当我们有多个进程同时申请进入临界区时,我们需要保证临界区仍遵循1.互斥进入;2.有空让进;3.有限等待;
这也就是Lamport面包店算法解决的问题。下面是对Lamport面包店算法的细节讲解
这里补充几点:
1.( a , b ) < ( c , d ) 成立等价于 (a < c ) || ( a == c && b < d ) 成立,放在本题也就是序号越小的越先执行,如果序号一样,PID越小的越先执行。
2.choosing是一个数组,i表示进程,含义是进程是否在选取排队号码
number也是各一个数组,i表示进程,含义是进程的排队号码
do{
//进程i正要选取进入临界区的排队号码choosing[i]=true;//进程i正在选取序号,进入排队序列中number[i]=max(number[0],number[1]...number[n-1])+1;//进程i选取序号完毕choosing[i]=false;//这个for循环有尽头,也是有空让进的一种粗浅体现for(j=0;j<n;j++){//判断此时这个进程是否在选取信号while(choosing[j]);/*判断进程j是否在队列中,这个条件等价于只有当j进程在排队且j进程的
优先级高于i进程,i进程自旋等待,等待j进程申请完临界区后退出临界区。*/while((number[j]!=0)&&(number[j],j)<(number[i],i));}...//临界区代码//进程i执行完毕退出临界区了,再申请,就重新排队number[i]=0;}while(true);
整个情况就类似于你排队去面包房买面包,首先排队,当轮到你了,买面包(也就是执行代码),买完后。如果想要再买就重新排队。
总体来说如果不考虑硬件层面对临界区的实现,Lamport面包店算法已经可以了。
面包店算法带有代码的详细讲解相关推荐
- CV项目肢体动作识别(三)内附完整代码和详细讲解
CV项目肢体动作识别(三)内附完整代码和详细讲解 首先我还是给出完整的代码,然后再进行详细的讲解.这一次我们用模块化的思想,把一个功能模块化(moudle),这种思想在工程中非常常见,在分工中你需要做 ...
- bat脚本常用命令及亲测示例代码超详细讲解
这篇文章主要介绍了bat脚本常用命令及亲测示例代码超详细讲解,在这里需要注意编辑bat文件请使用ANSI编码,不然容易出现中文乱码,需要的朋友可以参考下 目录一 1.语句注释 2.暂停 3.输出和换行 ...
- blog微服务架构代码_Spring Cloud微服务架构代码结构详细讲解
上一篇我们介绍了spring cloud云服务架构 - particle云架构代码结构,简单的按照几个大的部分去构建代码模块,让我们来回顾一下: 第一部分: 针对于普通服务的基础框架封装(entity ...
- 黑猩猩优化算法python代码(详细注释)
黑猩猩优化算法介绍:黑猩猩优化算法(Chimpanzee Optimization Algorithm,COA)是一种启发式优化算法,灵感来自于黑猩猩社会行为中的寻食行为.下面是该算法的代码及原理过程 ...
- 一万一千字!结合代码超详细讲解SQL执行流程(二)!干货到底!建议收藏!
上文我们已经学习到查询SQL语句的执行过程中如何获取 BoundSql!接下来继续从查询SQL语句的执行过程中如何创建 StatementHandler!喜欢的朋友们可以来个一键三连哦~ 目录 查询S ...
- VQ矢量量化 LBG算法 c++代码实现 详细注释
参考: 1.语音信号处理之(三)矢量量化(Vector Quantization) 这篇真的是非常厉害,在CSDN很多矢量量化的文章都是参考了这篇文章 2.矢量量化 百度文库的PPT,详细的描述了矢量 ...
- java 排序算法 讲解_java实现排序算法之冒泡排序法详细讲解
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交 ...
- 蜻蜓优化算法Python代码(详细注释)
1.代入例子,目标函数求最优解迭代过程: 蜻蜓算法流程: 蜻蜓算法(Dragonfly Algorithm)是一种基于种群的优化算法,灵感来自于蜻蜓的群集行为.该算法通过模拟蜻蜓之间的吸引力和斥力,以 ...
- 扫雷【含递归和标记的完整代码及详细讲解】
目录 一.游戏思路 二.游戏部分设计 1.棋盘的初始化 2.棋盘的打印 3.雷场的布置 4.用户排雷 5.递归函数部分 三.完整代码 四.结语 扫雷,扫雷是一款大众类的益智小游戏,于1992年发行.游 ...
最新文章
- 别再说你不懂Linux内存管理了,10张图给你安排的明明白白!
- Google学术分析公司科研实力:谷歌1161,华为110,为何差10倍?
- socket 编程入门教程(四)TCP应用:1、构建echo服务器
- bzoj1038 [ZJOI2008]瞭望塔
- secFox setting
- ComponentOne Ultimate 2020中文版
- 数据中心机房冷热通道优化设计经验谈
- java调用webservice_WebService学习总结(四)——调用第三方提供的webService服务
- GC算法以及垃圾回收器
- python canopen_Python canopener包_程序模块 - PyPI - Python中文网
- UI自动化测试 appium简介
- 虚拟化解决方案 并不仅限于SDN
- shell---登录失败的IP添加到/etc/hosts.deny
- java 28181协议_WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台
- 基于 c++ 语言的简易 vim 编辑器
- window.location.href如何多次请求_测试同学必会系列之如何进行幂等性的测试
- 淘金网UCskype即时通讯软件定制
- OpenSCAP安装与使用
- JAVA实现Excel照相机功能_Excel如何将工作表转换为图片,并随着数据的变化自动更新?...
- 作为学生借助 CODECHINA 这样学习 Git 知识
热门文章
- 详细的Tomcat安装教程
- 微型计算机主额的参数是什么,[计算机硬件及网络]1第1章 微型计算机系统简介er20.ppt...
- 学习软件测试关键的地方80%人都不清楚
- 使用Alexnet模型识别猫和狗
- echarts展示导入的数据
- 如何在JavaScript中将十进制转换为十六进制
- csgo盗版自建服务器,【图片】CSGOKZ服务器架设教程(windows版)包含申请全球服务器。【csgokz吧】_百度贴吧...
- 拜占庭将军问题与XFS
- VMware中Ubuntu20.04下有显示器手动调节Nvidia显卡风扇转速
- 计算机网络实验二交换机配置Cisco,计算机网络实验1 — Cisco交换机的配置