当前位置: 首页 > news >正文

软件同步机制-Peterson解决方案 简单讲解

Peterson 解决方案是用来处理两个进程互斥访问临界区的问题,临界区就是一段不允许其他进程同时进入执行的代码区域 。

共享变量

  • int turn = 0; :这个变量用来记录轮到哪个进程进入临界区。它就像一个指示牌,告诉进程现在该谁 “上场” 了。初始值为 0 ,可以理解为一开始默认先让某个进程(比如进程 0 )有优先进入的机会。
  • turn == i; :这是一个判断条件,当turn的值等于进程编号i时,意味着当前进程Pi可以进入临界区。
  • j = 1 - i; :因为是两个进程,i取值为 0 或 1 ,通过这个计算得出另一个进程的编号。比如i = 0时,j = 1 ,代表另一个进程 。
  • boolean flag[2]; :这是一个布尔数组,有两个元素。flag[0]flag[1] ,分别对应两个进程。
  • flag [0] = flag [1] = false; :表示一开始两个进程都没有准备进入临界区。
  • flag [i] = true ; :当进程Pi想要进入临界区时,会把自己对应的flag[i]设为true ,就像举个牌子说 “我准备进入临界区啦” 。

进程 Pi 的执行流程

  • 准备阶段
    • flag [i]:= true; :进程Pi把自己的flag标记设为true ,宣告自己想进入临界区。
    • turn = j; :进程Piturn设为另一个进程Pj的编号,这是一种 “礼让” 行为,意思是 “我虽然想进,但也先看看对方要不要进” 。
    • while (flag [j] and turn = j); :进程Pi会检查另一个进程Pj的状态。如果Pj也想进入临界区(flag[j]true ) ,而且现在轮到Pjturn = j ) ,那进程Pi就会在这个循环里等待。就好比在门口排队,得等前面的人进去或者轮到自己才能进 。
  • 进入临界区:当等待条件不满足了,说明Pj不想进或者轮到自己了,进程Pi就可以进入临界区执行关键代码 。
  • 离开临界区flag [i] = false; ,进程Pi执行完临界区的代码后,把自己的flag标记设为false ,表示 “我已经从临界区出来啦” 。
  • 剩余区操作:进程Pi去执行其他非关键代码部分,也就是剩余区的操作 ,然后又会循环回到准备进入临界区的步骤,不断重复这个过程 。

Peterson 解决方案满足了

互斥(同一时刻只有一个进程能进入临界区 )、

进展(只要有进程需要进入临界区,就不会出现所有进程都无法进入的死锁情况 )、

有限等待(一个进程请求进入临界区后,在其他进程有限次进入临界区后,该进程一定能进入 )这三个需求,有效解决了两个进程的临界区问题 。 

http://www.xdnf.cn/news/669583.html

相关文章:

  • 攻防世界-你猜猜
  • js判断当前设备是否为移动端
  • camera_venc_thread线程获取高分辨率编码码流
  • Vue组件化
  • Rust 学习笔记:关于闭包的练习题
  • Flink系列文章列表
  • 分布式系统中的网络编程
  • wordpress迁移到Hostinger
  • 爬虫入门指南-某专利网站的专利数据查询并存储
  • YOLOv2 深度解析:目标检测领域的进阶之路
  • 【文献阅读】EndoChat: Grounded Multimodal Large Language Model for Endoscopic Surgery
  • 【HW系列】—目录扫描、口令爆破、远程RCE流量特征
  • 攻防世界-ics-07
  • 【Web应用】基础篇04-功能详解-权限控制(创建菜单--分配角色--创建用户)
  • 使用 scikit-learn 库对乌克兰冲突事件数据集进行多维度分类分析
  • ABP VNext + Apache Flink 实时流计算:打造高可用“交易风控”系统
  • 【深度学习】9. CNN性能提升-轻量化模型专辑:SqueezeNet / MobileNet / ShuffleNet / EfficientNet
  • 汽车电子/电气(E/E)架构将朝着区域(分区)式架构方向发展
  • Filebeat es 同步服务器日志到es
  • C++ STL 容器:List 深度解析与实践指南
  • Linux编辑器——vim的使用
  • 文件上传白名单绕过(图片马 - 图片二次渲染绕过)
  • React从基础入门到高级实战:React 核心技术 - React 与 TypeScript:构建类型安全的应用
  • 第十章:构建之巅 · 打包与部署的终极试炼
  • uniapp-商城-72-shop(5-商品列表,步进器添加商品到的购物车实现)
  • Unsupervised Learning-Word Embedding
  • 如何提高CAD作图设计效率,技术分享
  • 每日算法 -【Swift 算法】实现回文数判断!
  • stm32f系列工程切换到H系列
  • 电芯单节精密焊接机:以先进功能与特点赋能电池制造科技升级