进程同步之临界区域问题及Peterson算法

进程互斥——Peterson算法详细解析 在本文中介绍了软件实现异步的Peterson算法,其中详细分析了Peterson算法的运作过程以及对算法的理解。其中包含了Peterson算法运行时的各种情况分析以及对每种情况下为什么如此编写算法的大致理解。 阅读详情
  •  1. 背景                                                                                                                                                                                                              首先,看个例子,进程P1,P2共用一个变量COUNT,初始值为0
                                          

     因为P1,P2两个进程的执行顺序是随机的,可能顺序执行也可能是并发的,由图可见,不同的执行顺序,COUNT的值会不同,这是不允许的。
     像这种情况,及多个进程并发访问和操作同一数据且执行结果与访问发生的特定顺序有关,称为竞争条件。

  • 2.临界区域问题
      为了避免上述情况的发生于是就引入了 临界区 概念。一个系统有n个进程,每个进程有一个代码段称为临界区。这种系统重要特征是当一个进程在临界区内执行,没有其他进程被允许在临界区内执行。
     临界区问题必须满足三项原则:互斥,前进,有限等待。解释如下:
                 
  • 3.Peterson算法   
     了解了临界区之后,那么如何控制两个进程访问一个共享的单位用户资源而不发生访问冲突。Peterson算法是一个实现互斥所的并发程序设计算法,它很好地解决了这个问题。
     先看看两个非该算法的程序
                                            
      仔细分析上面两段代码可以知道当多进程执行代码时他们都违反了Progress原则(临界区三原则)。
     
     Peterson算法代码如下:很好地满足了临界区三原则。
     利用了中间值turn,避开了。

                          pi进程                                              pj进程(交换i、j位置即可)       
               

          伪代码
                    

     java代码实现
public class Peterson implements Runnable {

    private static boolean[] in = { false, false };
    private static volatile int turn = -1;

    public static void main(String[] args) {
        new Thread(new Peterson(0), "Thread - 0").start();
        new Thread(new Peterson(1), "Thread - 1").start();
    }

    private final int id;

    public Peterson(int i) {
        id = i;
    }

    private int other() {
        return id == 0 ? 1 : 0;
    }

    @Override
    public void run() {
        in[id] = true;
        turn = other();
        while (in[other()] && turn == other()) {
            System.out.println("[" + id + "] - Waiting...");
        }
        System.out.println("[" + id + "] - Working ("
                + ((!in[other()]) ? "other done" : "my turn") + ")");
        in[id] = false;
    }}



      如果想更深入了解Peterson算法可以参观下下面网址:
       
4.临界资源
上面讲到了临界区,那么就有必要提到临界资源了。虽然在多道程序系统中的诸进程可以共享各类资源,然而临界资源却是一次只能供一个进程使用,使用完后归还系统,才能给其他进程使用。(例如上面例子中的COUNT是临界资源)
进程对临界资源必须互斥使用,为实现临界资源的互斥访问,应该保证诸进程互斥地进入自己的临界区。为此每个进程在进入其临界区前,必须先申请,经过允许后方能进入。

同步机制应该遵循的准则:

空闲让进
当无进程处于临界区内时,必须让一个要求进入临界区的进程立即进入,以有
效地利用
临界资源。
忙则等待
当已有进程处于临界区内时,其它试图进入临界区的进程必须等待,以保证它
们互斥地进入
临界区。
有限等待
对要求进入临界区的进程,应在有限时间内使之进入,以免陷入“死等”。
让权等待
对于等待进入临界区的进程而言,它必须立即释放处理机,以免进程“忙等”

解决互斥的锁机制:
实现互斥的一种软件方法是采用锁机制,即提供一对上锁和开锁原语,以及一个所变量W
进入临界区前,通过所变量来判断临界资源是否被占用。

但是锁机制仅能表示“开”与“关”两个状态;开、关原语必须作为原子操作来进行;关锁原复测试W状态,浪费了处理机的时间;锁机制只能解决互斥,不能用于同步。信号同步机制很好地解决了这个问题,下篇博客(进程同步之信号量机制(pv操作)及三个经典同步问题)将为你详细解读信号量机制。





转载请注明出处:http://blog.youkuaiyun.com/speedme

Perplexity SPACE沙箱平台:安全AI开发环境实战解析 沙箱技术通过资源隔离和权限控制创建受限执行环境,其核心原理是容器化隔离机制。在AI开发领域,这种技术解决了环境配置复杂性和安全风险等关键问题。SPACE沙箱平台作为AI代码执行环境,提供了标准化的开发沙箱,支持Python生态和主流AI框架。通过实战案例展示,该平台特别适用于情感分析等NLP任务的快速原型验证,帮助开发者在安全隔离的环境中测试AI模型和算法,显著提升开发效率并降低系统风险。 阅读详情

相关推荐

告别连接难题:Windows 11下Multisim主数据库稳定运行终极配置指南

本文详细解析了Windows 11下Multisim 14.0主数据库连接失败的三大根源,并提供了四步终极解决方案,包括系统环境优化、软件权限配置、注册表修复和网络验证绕过技巧。通过实测数据对比,本方案显著提升了启动速度和稳定性,解决了电子仿真中的常见连接问题。

weixin_33738555的博客 435

《操作系统》第六章习题加解析(重点学习)

《操作系统》习题

qq_57531804的博客 1万+

Windows电脑如何用MobaXterm连接宇树G1机器人?保姆级SSH配置指南

本文提供了一份详细的保姆级教程,指导Windows用户使用MobaXterm通过SSH连接宇树G1机器人。内容涵盖从物理网络配置、MobaXterm安装与SSH会话创建,到文件传输、X11转发等高级功能,并包含常见问题排查与安全加固建议,帮助开发者快速建立稳定可靠的远程开发连接。

purple的博客 878

操作系统进程的同步与互斥及经典同步与互斥问题

这里写目录标题概览临界区临界区的引入临界区的概念进程的同步与互斥的概念解决方法经典同步与互斥问题 概览 临界区 临界区的引入 在系统当中,有些资源允许多个进程共享(磁盘),有些资源只允许进程单独使用(打印机,共享变量)。为了让进程单独使用资源而不受其他进程干扰引入了临界区的概念。 临界区的概念 在一段时间内只允许一个时间段使用的资源成为临界资源,每个进程访问资源的那段程序称为临界区。 如图进程访问临界区的一般结构 1.进入区:检查临界资源是否已经被访问,如果临界资源已经被访问,该进程不能进入。 2.临界

weixin_44282063的博客 3461

Unity 代码混淆<混淆插件(Obfuscator Pro 3.9.4)>

Unity 代码混淆<混淆插件(Obfuscator Pro 3.9.4)> 插件导入项目 导入后打开OPS/Obfuscator/Obfuscator Pro Settings 打开后可以看到界面如下 可以在上面界面中选择你需要混淆的类,方法,字段,属性,事件,参数。需要混淆的程序集的选择。如果有些程序集混淆后会有问题也可以添加到白名单里不被混淆 根据自己需求取选择 这个界面是是否添加添加随机代码的 如果使用了上面的插件可以使用 插件下载网址:https://download.cs

Xing_Cheng_Yun的博客 5103

FreeSWITCH彩铃与回铃音区别详解:从183/180信令到mod_da2检测模块

本文深入解析FreeSWITCH中彩铃与回铃音的技术差异,从183/180信令机制到mod_da2智能检测模块的实现原理。通过对比SIP协议中的早期媒体传输、回铃音补偿技术及实战案例,帮助开发者掌握VoIP系统中的关键音频处理技术,提升呼叫系统稳定性和用户体验。

tree8的博客 349

临界区算法:Peterson算法与Dekker算法

当时老师在课上讲的时候就没搞懂 现在要写作业了果然还是得靠自己学明白啊=_= 下面的概念都来自于《操作系统概念》这本书 首先说一下临界区问题(Critical Section Problem) 临界区的问题的解答必须满足以下三个条件: 1)     互斥:如果进程Pi在其临界区内执行,那么其他进程都不能在其临界区内执行。 2)     有空让进:如果没有进程在其临界

SpadgerZ的博客 1万+

SWIFT报文实战指南:从MT700到MT799的信用证操作全解析

本文深入解析了国际贸易中信用证操作的核心SWIFT报文流程,从开证的MT700到各类通知、修改及结算报文(如MT707、MT730、MT754、MT732/734等)。通过实战案例与关键字段拆解,指导外贸与银行从业者精准处理报文,规避风险,并探讨了利用自动化工具提升处理效率的方法,助力保障跨境交易顺畅。

weixin_29015801的博客 880

多进程并发相关概念-临界区、死锁、互斥

并发相关术语:原子操作:一个或多个指令的序列,对外是不可分的;即没有其他进程可以看到其中间状态或者中断次操作。临界区:是一段代码,在这段代码中进程将访问共享资源,当另外一个进程已经在这段代码中运行时,这个进程就不能在这段代码中执行。死锁:两个或两个以上的进程因其中的每个进程都在等待其他进程做完某件事情而不能执行,这样的情形叫做死锁。活锁:两个或两个以上的进程为了响应其他进程的变化持续改变自己的状态...

huofire001的博客 2066

3.4 ISIS和OSPF之间路由引入

通过以上输出可以看到OSPF的路由引入到了IS-IS中。通过以上输出可以看到ISIS的路由没有传递给OSPF。通过以上输出可以看到OSPF的路由没有传递给ISIS。通过以上输出可以看到ISIS的路由被引入进了OSPF。掌握在IS-IS中引入OSPF路由的方法。掌握在OSPF中引入IS-IS路由的方法。图3-3:ISIS和OSPF之间路由引入。在R3上把ISIS的路由引入到OSPF。OSPF引入外部路由的缺省度量值为1。在R3上把OSPF的路由引入到ISIS。引入的外部路由类型为Type2。

lwljh134的博客 1803

微信小程序 - 详细实现随机生成订单号,微信小程序创建订单号思路,不重复订单号生成的方法,小程序自动生成固定规则的订单号流水号(必须是唯一不重复的订单号,生成唯一订单号)详细生成方法,示例代码教程最新

微信小程序,vue2,vue3,订单号,流水号思路,微信小程序 详细实现随机生成订单号(JavaScript),随机生成商户订单号,根据当前时间随机生成流水号或者订单号,微信小程序之商家订单,订单号随机生成器,自动生成固定规则的订单号(前缀+采购日期+6位流水号)微信小程序 生成外卖顺序号,生成订单号或流水号简单方法,实现订单号生成唯一的解决方案,如何按日期生成订单号,14位编号=8位日期(+6位流水号),自动生成订单号(固定+日期+数字),销售订单号自动生成。在微信小程序开发中,详解实现随机生成创建订单号

🏆 前端领域优质创作者 1187

操作系统 进程管理(三)——进程同步方法简述

目录 进程同步的基本概念 1)两种形式的制约关系 2)Critical section(临界区) 3)Mutual exclusion(互斥) 4)Dead lock(死锁) 5)Starvation(饥饿) 6)面包问题(锁的概念) 同步机制原则 实现进程互斥的方法 方法一 基于软件的解决方案 算法一 x 算法二 x 算法三 x 算法四——Peterson算法 1981 √ 算法五——Backery算法作为补充 方法二 禁用硬件中断 (一)锁方法 TS互斥 (二)交换.

LarsGyonX的博客 3271

清洁机器人之屏幕(中,大LCD)方案--ITE 联阳986x系列 soc显控芯片介绍

清洁机器人之屏幕(中,大LCD)方案--ITE 联阳986x系列 soc显控芯片介绍

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2666

操作系统 第六章 进程同步

进程同步同步与互斥同步-进程之间需要协作同步定义互斥-进程之间需要共享资源临界资源互斥:交叉执行处理过程中的问题 - 生产者消费者问题共享变量处理不好会造成数据不一致Producer-Consumer Problem描述The Critical-Section Problem临界区域临界区解决方案Peterson 算法 同步与互斥 同步-进程之间需要协作 程序定义了每个线程中所有的操作的顺序,符合偏序关系 线程间的操作顺序有线程调度决定 同步定义 并发执行环境下,保持操作系统间偏序关系的行为,称为同步

greatcoder的博客 717

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

进程临界问题

http://blog.youkuaiyun.com/speedme/article/details/17595821 1. 背景                                                                                                                             

xfliu的博客 1009

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

操作系统(慕课版)-----进程同步(学习笔记)

内容参考于慕课版《计算机操作系统》

qq_74329022的博客 1365

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

进程死锁算法——Peterson与Dekker

进来Bear正在学习巩固并行的基础知识,所以写下这篇基础的有关并行算法的文章。 在讲述两个算法之前,需要明确一些概念性的问题, Race Condition(竞争条件),Situations  like  this,  where  two  or  more processes  are  reading or writing some shared data and the fin

smilesundream的博客 1494

操作系统 2.3进程同步

2.3 进程的同步与互斥 2.3.1 进程的同步的基本概念 临界资源 定义:一次仅允许一个进程使用的资源称为临界资源 eg:就好像早上起来在宿舍和同学抢厕所时,把我和同学比做两个进程,两者就是同步的协作关系,而厕所就是临界资源 访问临界资源的过程可分为4个部分: (1)进入区 (2)临界区:进程中访问临界资源的那段代码 (3)退出区 (4)剩余区 同步(见上面的例子) 互斥 属于同步的一种,同步机制需要遵守的4个原则: 1)空闲让进 2)忙则等待 3)有限等待 4)让权等待 2.3.2 实现临界

be_stronger的博客 348

进程同步与信号量(李治军操作系统课笔记6)

临界区:一次只允许一个进程进入 为什么需要临界区?两个生产者因竞争资源会产生随机的执行顺序,造成信号量的修改不当,信号量语义错误,所以需要保护信号量。 临界区代码的保护原则: 1、基本原则——互斥 2、有空让进 3、有限等待 临界区保护方法 1、轮换法: 但是,若P1被什么阻塞了,而P0结束了之后又不能继续进入临界区,导致两个都不在临界区。 2、标记法: 但是,因为变量不共享,所以看不到对方...

weixin_41761478的博客 376

【学习笔记】第二章——进程同步、进程互斥、进程互斥的硬件/软件实现方法

文章目录一. 进程同步 && 进程互斥四个区域四个原则总结:二. 进程互斥的软件实现方法1)单标志法2)双标志先检查法3)双标志后检查法4)Peterson 算法总结三. 进程互斥的硬件实现方法1)中断屏蔽方法2)TestAndSet 指令3)Swap 指令总结 一. 进程同步 && 进程互斥 由于进程有异步性,因此需要有同步存在。 同步也叫直接制约关系,指为完成某任务而建的两或多个进程,需要在某些位置协调各自的工作次序而产生的制约关系。进程间的直接制约关系就是源于他们之

只能说希望每日一更 725

Operating System · Process Synchronization (操作系统 · 进程同步) (四)

Process Synchronization 文章目录Process Synchronization前言一、生产者-消费者问题(producer-consumer)二、临界区(Critical Section)1,轮转法2,标记法3,Peterson算法4,阻止进程调度三、信号量机制(Semaphores)1,信号量的定义2,使用信号量总结 前言 上一章我们介绍了操作系统中的进程及其调度。进程的引入在提高系统资源利用率,提高系统的吞吐量的同时,也使得系统变得更加复杂,如何对进程进行妥善地管理以避免他

victorieskkkk的博客 534

学习操作系统必看——进程同步(synchronization)临界区,互斥锁,信号量

第六章 进程同步(synchronization) 协作进程可以在系统内执行其他进程相互影响的进程。可以共享逻辑地址空间(代码和数据)共享数据的并发性,可能会产生数据的不一致,本章讨论确保共享同一逻辑地址的进程有序执行,维护数据的一致性。  Processes can execute concurrently  May be interrupted at any time, partially...

机器学习初学者必看,关注我,一起了解机器学习 1236

操作系统笔记------进程同步(1)

操作系统笔记------进程同步(1)

博客 1058

Operation System - Peterson's Solution算法 解决多线程冲突

Person's solution 是用来一种基于软件的解决关键区域问题的算法(critical-section). 它并非完美的,有可能不正确地工作。而且是限制解决两个进程同步的问题。 但是它很简单,很原始,学习起来也是很轻松的。 代码如下: do { flag[i] = true; turn = j; while (flag[j] && turn == j

靖空间 4981
上一篇: 优快云全国巡讲---重庆大学站
下一篇: 进程同步之信号量机制(pv操作)及三个经典同步问题
SpeedMe
博客等级 码龄15年 779粉丝 142原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值