形式化验证工具(PAT)Perterson Algorithm学习

今天学习一下Perterson Algorithm.

这个算法是使用三个变量来实现并发程序的互斥性算法。

具体看一下代码:

Peterson算法是一个实现互斥锁的并发程序设计算法,核心就是三个标志位是怎样控制两个方法对临界区的访问,这个算法设计的想当精妙,我刚开始看的时候就被绕了一下。

算法使用两个控制变量flag与turn. 其中flag[n]的值为真,表示ID号为n的进程希望进入该临界区. 标量turn保存有权访问共享资源的进程的ID号。

注意到如果进程P0和P1并发,那么两者中必然会有一个会被while堵塞住(因为flag[0和1]均等于true),而另一个会完成自己的任务并置对方的flag位为false,这时while的条件不再满足,即可执行自己的程序,实现了互斥。

下面看一下PAT里面是如何实现的:

#define N 2;
var turn;
var pos[N];

P0() = req.0{pos[0] = 1; turn=1} -> Wait0(); cs.0 -> reset.0{pos[0] = 0} -> P0();
Wait0() = if (pos[1]==1 && turn == 1) { Wait0() };

P1() = req.1{pos[1] = 1; turn=0} -> Wait1(); cs.1 -> reset.1{pos[1] = 0} -> P1();
Wait1() = if (pos[0]==1 && turn == 0) { Wait1() };

Peterson() = P0() ||| P1();

这里我不是太懂,就是Wait0和Wait1两个进程,我觉得可能就是源代码里面的while进程,就Wait0进程而言,如果满足(pos[1]==1&&turn==1)这些条件,就一直卡在这里。如果不满足这个条件,就相当于Skip动作,什么都不做。不知道我的理解是不是有问题。

原文地址:https://www.cnblogs.com/LoganChen/p/8143552.html

时间: 2024-10-27 01:33:17

形式化验证工具(PAT)Perterson Algorithm学习的相关文章

RChain的一键形式化验证:关于RCast 33 – LADL话题的讨论摘要

作者/Atticbee 在这一集,Greg和RChain的研究人员Isaac,Christian讨论了TLA(Temporal Logic of Actions)和RChain的LADL(Logic As Distribution Law).下面是Atticbee做的摘要,然后加了一些自己的理解. TLA (Temporal Logic of Actions,行为时序逻辑)是并发系统进行形式化验证的首选工具,很多分布式的并发系统都用选用这个工具来进行验.有一些背景介绍在这些文章里: https:

网站HTML,XHTML,XML,WML,CSS等测试验证工具介绍[转]

网站HTML,XHTML,XML,WML,CSS等语言测试验证工具介绍 1 在线网站语言测试检查网站: HTML和XHTML测试检查网站: http://validator.w3.org/ 或http://www.htmlhelp.com/tools/validator/ CSS测试检查网站:http://jigsaw.w3.org/css-validator/ RSS Feed测试检查网站: http://validator.w3.org/feed/或http://www.feedvalida

搭建工具辅助的知识学习流水线

1 知识学习的困难 学习对于个人乃至社会都是非常重要的.社会的发展离不开知识的传承,个人的进步依赖知识的积累.但在实际的学习过程中可能会遇到很多困难: 1.     互联网发展促使信息大爆炸,如何在其中找到有价值的目标? 2.     如何从众多的知识渠道将零散的内容收集汇总,形成系统化的知识? 3.     在工作和生活之余,怎样利用碎片化的时间提高学习的效率? 4.     在相同的时间投入下,如何获取更高学习成果? 下面针对问题从知识学习的流程出发,分享一些辅助工具和方法.工具和方法相互配

FSM状态图输入和验证工具StateCAD v5.01n

TeamFlow.v9.0(用于项目编制和流程编制的一个软件)         TeamFlow 9 是一个全功能的文档和整体花销/计划处理程序,但是目前他只支持最新的 Windows 系统版本.它能够 制作流程图和绘图,帮助企业或者开发者完成比如设计,用户文档.以及流程图的制作等工作.TeamFlow 还可以创建实时的 ,用图片组成的流程图,发布到网络上面,提供数据共享.CaslonFlow.v5.5.0.0(一款计算机工作流自动化软件) Vissim-Comm v6.0A(卫星.终端等的通信

验证工具类 - ValidateUtils.java

验证工具类,提供验证email格式.是否ipv4.是否ipv6.是否中文.是否数字.正则表达式验证的方法. 源码如下:(点击下载 - ValidateUtils.java .commons-lang-2.6.jar.httpclient-4.3.3.jar) import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.commons.lang.StringUtils; import org.a

Java常用正则表达式验证工具类RegexUtils.java

原文:Java常用正则表达式验证工具类RegexUtils.java 源代码下载地址:http://www.zuidaima.com/share/1550463379442688.htm Java 表单注册常用正则表达式验证工具类,常用正则表达式大集合. 1. 电话号码 2. 邮编 3. QQ 4. E-mail 5. 手机号码 6. URL 7. 是否为数字 8. 是否为中文 9. 身份证 10. 域名 11. IP .... 常用验证应有尽有! 这的确是您从事 web 开发,服务器端表单验证

mysql主从同步验证工具

(1).pt-table-checksum 工具名称 (2).安装pt-table-checksum #:wget www.percona.com/downloads/percona-toolkit/2.2.2/percona-toolkit-2.2.2.tar.gz #:tar -xvf percona-toolkit-2.2.2.tar.gz #:perl Makefile.PL # make && make install (3).授权 GRANT update,insert,del

Java、Android身份证验证工具 支持15/18位、地区、生日和校验码验证

首先科普一下身份证的一些知识(知道的勿喷) 1-2 位:代表升级行政区代码 3-4 位:代表地级行政区划分代码 5-6 位:代表县区行政区分代码 7-14 位:代表出生年.月.日,例如:19900101 15-17 位:代表 顺序码,同一地区同年.同月.同日出生人的编号,奇数是男性,偶数是女性 18 位:代表校验码,如果是0-9则用0-9表示,如果是10则用X(罗马数字10)表示 注:另外有些15位的身份证号码,年份使用2位数字表示的,并且没有最后一位校验码:从1999年10月1日起,全国实行公

通用js表单验证工具类插件-is.js

is.js是一个强大的通用js表单验证工具类.你可以使用js.js来检测任何东西,例如检测所给的值是否为参数,是否是数组,是否是超链接,甚至可以检测浏览器类型,正则表达式和数学表达式等. is.js根据检测的类型分为:类型检测.正则表达式检测.算数检测.环境检测.时间检测.Presence检测.对象检测.字符串检测数组检测和配置检测. 在线文档:http://www.htmleaf.com/Demo/201502091353.html 下载地址:http://www.htmleaf.com/jQ