Promela轻松入门教程

来源:互联网 发布:xampp linux 使用教程 编辑:程序博客网 时间:2024/05/12 21:17

最近在学并发开发, 里面需要用到Promela语言来检测代码的逻辑


Promela用起来很麻烦, 不过网上有个Windows GUI程序, 里面还带了很多例子代码, 稍微看看就可以懂了


工具名称叫JSpin, 在这里下载

https://code.google.com/p/jspin/


安装起来很简单, 安装好之后, 打开安装目录下的config文件, 吧Mingw路径配置好就可以了.


打开程序运行, 随便找个示例代码跑下, 如果编译不成功, 那么就在他的Run.bat前面加上这行


SET PATH=%path%;c:/path_of_mingw/bin


你可以在安装目录下找到用户手册jspin-user.pdf


一般检测并发代码需要检测下面三项

1.互斥(Mutual exclusion)

2.无死锁(Free from Deadlock)

3.无饥饿(Free from starvation)


在这个工具里面, 你可以用assert()来进行检测, 也可以自己写LTL(线性时间逻辑)来检测,

你可以打开里面的 dekker.pml 学习下如何使用它们来检测

pml语言的语法略奇葩,不过看看就会, active proctype 就是声明一个线程

/* Dekker's algorithm */bool    wantp = false, wantq = false;byte    turn = 1;bool csp = false, csq = false;ltl { []<>csp && []<>csq }active proctype p() {    do    ::  wantp = true;        do        :: !wantq -> break;        :: else ->            if            :: (turn == 1)            :: (turn == 2) ->                wantp = false;                (turn == 1);                wantp = true            fi        od;        csp = true;        assert (!(csp && csq));        csp = false;        wantp = false;        turn = 2    od}active proctype q() {    do    ::  wantq = true;        do        :: !wantp -> break;        :: else ->            if            :: (turn == 2)            :: (turn == 1) ->                wantq = false;                (turn == 2);                wantq = true            fi        od;        csq = true;        assert (!(csp && csq));        csq = false;        wantq = false;        turn = 1    od}


线性时间逻辑就是在逻辑的基础上加上了时间的概念, []表示永远是1, <>表示在未来终究会出现1 等等

http://web.iitd.ac.in/~sumeet/slide3.pdf

https://www.youtube.com/watch?v=KVQdTjvtyUw


dekker.pml中的
ltl { []<>csp && []<>csq }
表示的意思就是
永远会反反复复的进入p的critical section && 永远会反反复复的进入q的critical section
这句话就是用来检测starvation的, 如果程序有能力反复执行p而不执行q(无论几率多么小), jspin都会报错


检测ltl的时候请选择acceptance模式.


测试starvation的时候去掉weak fairness
意思就是:允许一个能够反复执行的进程无限反复执行,每次都是他执行, 而不让其他的进程执行(在现实的计算机cpu中是不现实的)
如果你的程序有了starvation freedom的话, 那么就会保证上述的情况永远不会出现


0 0
原创粉丝点击