`

Peterson 算法

 
阅读更多

Peterson 算法(Dekker算法的演化)是免锁编程的基本算法之一,这个算法设计得很巧妙,核心就是三个标志位是怎样控制两个方法对临界区的访问的: 

Java代码  收藏代码
  1. volatile int flag1 = 0//主观因素:flag1表示方法1自身是否要求进入临界区      
  2. volatile int flag2 = 0//主观因素:flag2表示方法2自身是否要求进入临界区      
  3. volatile int turn = 1//客观因素:turn取1和2分别表示当前临界区针对方法1还是方法2开放     
  4.     
  5. void fun1(){      
  6.   flag1 = 1;      
  7.   turn = 2;      
  8.   while( flag2==1 && turn==2 ){} //只有在方法2自身要求进入临界区且临界区针对方法2开放时,方法1才会阻塞      
  9.   //Critical Section      
  10.   ... //临界区内      
  11.   flag1 = 0;      
  12. }      
  13.     
  14. void fun2(){      
  15.   flag2 = 1;      
  16.   turn = 1;      
  17.   while( flag1==1 && turn==1 ){} //只有在方法1自身要求进入临界区且临界区针对方法1开放时,方法1才会阻塞      
  18.   //Critical Section      
  19.   ... //临界区内      
  20.   flag2 = 0;      
  21. }     

分享到:
评论

相关推荐

    Dekker算法Peterson算法

    ### Dekker算法与Peterson算法详解 #### 一、Dekker算法 ##### 1.1 初步设想 在初步设计中,Dekker算法通过一个全局变量`turn`来控制两个进程P0和P1对临界区(Critical Section, CS)的访问。这个变量的值为0或1,...

    t=3 BCH码peterson解码算法(verilog)

    - **错误定位**:一旦找到syndromes,Peterson算法可以找到可能的错误位置。 - **错误校正**:最后,根据找到的错误位置,应用适当的位翻转来纠正错误。 在实际应用中,这样的Verilog实现可以作为数字通信系统的一...

    BCH码verilog源码(peterson算法)

    Peterson算法是实现BCH码的一种常见方法,它主要用于生成和解码BCH码。Peterson算法主要由两个关键部分组成:生成多项式的选择和Galois域GF(p^n)上的乘法运算。这里的p通常为2,n是码字长度的一个参数。生成多项式是...

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

    临界区域问题和Peterson算法就是解决这一问题的关键技术。 1. **临界区域问题**: 临界区域是指进程中用于访问共享资源的一段代码,每次只有一个进程能够执行这段代码。临界区域问题的出现是因为并发执行的进程...

    算法与数据结构 分布式算法课程 第12章 ASM - Peterson’s算法 共43页.pdf

    Peterson算法的特点在于它提供了一种简单而有效的方法来实现进程间的互斥访问,同时保证了锁出自由性(Lockout-Freedom)——即使在存在公平性的低级执行过程中,只要所有用户最终都释放了资源,则任何进入尝试状态...

    peterson_peterson_

    Peterson算法基于两个进程和一个共享资源的情况。它主要利用两个变量,分别是 turn(轮流标志)和 flag(请求/放弃标志)。每个进程有一个自己的 flag 位,用来表示该进程是否想要进入临界区,而 turn 变量则用来...

    Peterson_producer_consumer.zip_c语言Peterson

    标题中的“Peterson_producer_consumer.zip_c语言Peterson”指的是一个使用C语言实现的基于Peterson算法的生产者-消费者问题实例。生产者-消费者问题是多线程编程中常见的同步问题,而Peterson算法是解决两个进程...

    操作系统线程同步算法

    本主题将深入探讨未使用和使用Windows互斥量的线程同步方案,以及Peterson算法这一经典的软件解决方案。 首先,未使用Windows互斥量的线程同步可能导致线程间的不协调。在多线程环境中,如果没有适当的同步机制,...

    线程同步机制代码,用c++写的,:使用Windows互斥信号量操作函数和同步机制的Peterson,实现进程互斥和同步

    小实验三:根据同步机制的Peterson软件解决方案尝试自己编程实现线程同步机制和用于上述线程并发问题的解决,并基于程序运行时间长短将其与基于Windows互斥信号量的线程同步机制的效率展开比较。 实验要求:线程主体...

    Linux下模拟软件互斥实现算法

    以下将详细讲解在Linux环境下如何模拟实现四种经典的软件互斥算法:Dekker算法、Peterson算法、Lamport算法以及Eisenburg-Mcguire算法。 1. **Dekker算法**: 由荷兰计算机科学家Dijkstra提出,它是最早的并发控制...

    2.3_2_进程互斥的软件实现方法1

    Peterson 算法是一种经典的进程互斥算法,由 Gary L. Peterson 于 1981 年提出。该算法适用于两个进程之间的互斥,通过使用一个标志数组和一个 turn 变量来实现互斥。 在 Peterson 算法中,假设有两个进程 P0 和 P1...

    操作系统线程同步机制实验报告.doc

    通过实验,我们可以看到,使用Peterson算法的效率要比调用系统Mutex互斥变量的效率高很多。 2.1 Mutex互斥变量 Mutex(Mutual Exclusion)是操作系统提供的一种线程同步机制。Mutex变量可以确保在某一时刻只有一个...

    rs编码和译码的算法

    在RS码译码算法中,通常采用Massey算法来确定错误位置多项式的系数,这降低了传统Peterson算法中需要进行大量繁琐的乘除运算。RS码的译码流程通常包括以下几个步骤: 1. 接收码字多项式的伴随式计算。 2. 错误位置...

    基于软件互斥算法的临界区进程互斥的模拟实现

    本实验通过模拟实现四种经典的进程互斥算法,包括Dekker算法、Lamport算法、Peterson算法和Eisenberg算法,旨在让学生深入理解这些算法的原理及其在Java中的实现。 Dekker算法是最早提出的解决临界区问题的方法之一...

    经典互斥算法1

    3. **Peterson算法**:Peterson算法同样用于解决两个线程的互斥问题,它使用两个线程的标志变量`wantToEnter[1]`和`wantToEnter[2]`以及一个变量`turn`。每个线程在尝试进入临界区前都会设置自己的标志并检查对方...

    算法与数据结构 分布式算法课程 第02章 分布式算法简介 共59页.pdf

    - **ASM - Peterson's算法**:详细讲解了Peterson算法在异步共享内存系统中的应用。 - **实用互斥算法**:介绍了一系列用于实现互斥访问的算法,特别是那些包含读-修改-写操作的算法。 通过上述知识点的梳理,我们...

    算法与数据结构 分布式算法课程 第01章 简介 共68页.pdf

    深入研究Peterson算法在实现异步共享内存互斥中的应用。 #### 4.12 实用互斥算法.具有读-修改-写操作的算法 介绍实用的互斥算法以及支持读取、修改和写入操作的算法。 综上所述,这门课程不仅覆盖了分布式算法的...

    操作系统实验各类算法的程序

    例如,你可以看到基于信号量的同步机制(如Peterson算法或 Dekker算法)以及死锁预防和检测的实现。 2. **调度算法**:操作系统需要决定哪个进程应该获得CPU执行权。常见的调度算法有先来先服务(FCFS)、短作业...

    算法-欧拉回路(HDU-1878)(包含源程序).rar

    另一种方法是“霍夫曼桥”(Hoffman-Peterson算法),它也基于深度优先搜索,但更直接地寻找满足条件的回路。 压缩包内的源程序可能包含了参赛者用 C++、Java 或其他编程语言编写的解决方案。通过分析这些源代码,...

    3.2 临界区管理.pptx

    总之,Peterson算法是一种有效的临界区管理方法,它通过简单的逻辑控制实现了进程间的互斥访问,从而保证了共享资源的安全使用。然而,它的性能和适用范围有一定的限制,在实际应用中需要根据具体情况选择合适的解决...

Global site tag (gtag.js) - Google Analytics