现实中当我们有多个进程同时申请进入临界区时,我们需要保证临界区仍遵循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面包店算法已经可以了。

面包店算法带有代码的详细讲解相关推荐

  1. CV项目肢体动作识别(三)内附完整代码和详细讲解

    CV项目肢体动作识别(三)内附完整代码和详细讲解 首先我还是给出完整的代码,然后再进行详细的讲解.这一次我们用模块化的思想,把一个功能模块化(moudle),这种思想在工程中非常常见,在分工中你需要做 ...

  2. bat脚本常用命令及亲测示例代码超详细讲解

    这篇文章主要介绍了bat脚本常用命令及亲测示例代码超详细讲解,在这里需要注意编辑bat文件请使用ANSI编码,不然容易出现中文乱码,需要的朋友可以参考下 目录一 1.语句注释 2.暂停 3.输出和换行 ...

  3. blog微服务架构代码_Spring Cloud微服务架构代码结构详细讲解

    上一篇我们介绍了spring cloud云服务架构 - particle云架构代码结构,简单的按照几个大的部分去构建代码模块,让我们来回顾一下: 第一部分: 针对于普通服务的基础框架封装(entity ...

  4. 黑猩猩优化算法python代码(详细注释)

    黑猩猩优化算法介绍:黑猩猩优化算法(Chimpanzee Optimization Algorithm,COA)是一种启发式优化算法,灵感来自于黑猩猩社会行为中的寻食行为.下面是该算法的代码及原理过程 ...

  5. 一万一千字!结合代码超详细讲解SQL执行流程(二)!干货到底!建议收藏!

    上文我们已经学习到查询SQL语句的执行过程中如何获取 BoundSql!接下来继续从查询SQL语句的执行过程中如何创建 StatementHandler!喜欢的朋友们可以来个一键三连哦~ 目录 查询S ...

  6. VQ矢量量化 LBG算法 c++代码实现 详细注释

    参考: 1.语音信号处理之(三)矢量量化(Vector Quantization) 这篇真的是非常厉害,在CSDN很多矢量量化的文章都是参考了这篇文章 2.矢量量化 百度文库的PPT,详细的描述了矢量 ...

  7. java 排序算法 讲解_java实现排序算法之冒泡排序法详细讲解

    冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交 ...

  8. 蜻蜓优化算法Python代码(详细注释)

    1.代入例子,目标函数求最优解迭代过程: 蜻蜓算法流程: 蜻蜓算法(Dragonfly Algorithm)是一种基于种群的优化算法,灵感来自于蜻蜓的群集行为.该算法通过模拟蜻蜓之间的吸引力和斥力,以 ...

  9. 扫雷【含递归和标记的完整代码及详细讲解】

    目录 一.游戏思路 二.游戏部分设计 1.棋盘的初始化 2.棋盘的打印 3.雷场的布置 4.用户排雷 5.递归函数部分 三.完整代码 四.结语 扫雷,扫雷是一款大众类的益智小游戏,于1992年发行.游 ...

最新文章

  1. 别再说你不懂Linux内存管理了,10张图给你安排的明明白白!
  2. Google学术分析公司科研实力:谷歌1161,华为110,为何差10倍?
  3. socket 编程入门教程(四)TCP应用:1、构建echo服务器
  4. bzoj1038 [ZJOI2008]瞭望塔
  5. secFox setting
  6. ComponentOne Ultimate 2020中文版
  7. 数据中心机房冷热通道优化设计经验谈
  8. java调用webservice_WebService学习总结(四)——调用第三方提供的webService服务
  9. GC算法以及垃圾回收器
  10. python canopen_Python canopener包_程序模块 - PyPI - Python中文网
  11. UI自动化测试 appium简介
  12. 虚拟化解决方案 并不仅限于SDN
  13. shell---登录失败的IP添加到/etc/hosts.deny
  14. java 28181协议_WEB VIDEO PLATFORM是一个基于GB28181-2016标准实现的网络视频平台
  15. 基于 c++ 语言的简易 vim 编辑器
  16. window.location.href如何多次请求_测试同学必会系列之如何进行幂等性的测试
  17. 淘金网UCskype即时通讯软件定制
  18. OpenSCAP安装与使用
  19. JAVA实现Excel照相机功能_Excel如何将工作表转换为图片,并随着数据的变化自动更新?...
  20. 作为学生借助 CODECHINA 这样学习 Git 知识

热门文章

  1. 详细的Tomcat安装教程
  2. 微型计算机主额的参数是什么,[计算机硬件及网络]1第1章 微型计算机系统简介er20.ppt...
  3. 学习软件测试关键的地方80%人都不清楚
  4. 使用Alexnet模型识别猫和狗
  5. echarts展示导入的数据
  6. 如何在JavaScript中将十进制转换为十六进制
  7. csgo盗版自建服务器,【图片】CSGOKZ服务器架设教程(windows版)包含申请全球服务器。【csgokz吧】_百度贴吧...
  8. 拜占庭将军问题与XFS
  9. VMware中Ubuntu20.04下有显示器手动调节Nvidia显卡风扇转速
  10. 计算机网络实验二交换机配置Cisco,计算机网络实验1 — Cisco交换机的配置