基于带抑止弧Petri网C多线程程序分析.docVIP

基于带抑止弧Petri网C多线程程序分析.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于带抑止弧Petri网C多线程程序分析

基于带抑止弧Petri网C多线程程序分析   摘要:在.net开发环境中使用C#语言编写多线程代码可以大大提高代码的运行效率,更好的利用计算机的资源。但是多线程代码在运行过程中有着不确定性会导致代码中的潜在错误难以发现,使得代码的正确性和健壮性受到影响。本文通过Petri网对一个C#多线程程序建立模型并且通过对该模型的结构和行为进行分析从而对程序中的错误进行定位,然后分析了引发错误的原因并给出了解决方案。   关键词:带抑止弧Petri 网;多线程;模型;C#编程   中图分类号:TP311 文献标识码:A       引言。在单个程序里面同时运行多个线程来完成不同任务,称为多线程。多线程主要目的是为了节约CPU时间,提高CUP的利用率。但多线程会给程序带来更多难以发现的bug。Petri是一种功能强大的分布式系统的建模分析工具。在描述、模拟、分析系统的顺序、冲突、并发和同步等关系上有着其他模拟分析工具难以比拟的优势。    1带抑止弧Petri 的概念。定义:一个五元组Σ=(S,T,F,I,M)组成一个带抑止弧的Petri网,(S,T,F)代表一个网,其中M表示一个网的标识,I。    2 应用实例。生产者/ 消费者问题是线程同步控制的非常典型的例子,本文的程序中 Producer 线程负责生产商品,Consumer 线程负责在有商品的时候消费商品。PandC 类的对象是生产商品线程和消费商品线程共同访问的商品数据。    程序如下:   using System;   using System.Threading;   namespace ProductAndConsume   {   //主程序   public class Program   {   public static void Main(string[] args)   {   PandC t = new PandC(5);   Procedure p = new Procedure(t);   Consumer c = new Consumer(t);   Thread t1= new Thread(p.show);   Thread t2 = new Thread(c.show);   t1.Start();   t2.Start();   Console.ReadLine();   }   }   }   //PandC类   public classPandC   {   public int number = 0 ;   public int size ;   public bool available = false ;   public PandC(int size)   {   this.size = size ;   }    }   //Procedure类   class Procedure   {   PandC t = null;   public Procedure(PandC t)   {   this.t = t;   }   public void show()   {   while (t.number t.size)   {   Console.WriteLine(Product Commodity + (++t.number).ToString());   t.available = true;   }   }   }   //Consumer类   class Consumer{   PandC t = null; int i = 0;   public Consumer(PandC t)   {   this.t = t;   }   public void show()   {   while (i t.size)   {   if (t.available == true i t.number)   Console.WriteLine(Consume Commodity + (++i).ToString());   if (i == t.number) t.available = false;   }   }   }    这个程序没有对线程进行同步,运行程序时不会出现问题,但是多次运行程序后会陷入死机程序出现错误。这个错误发生的几率很小,错误的原因也难以查找。但是依据上文的建模规则建立这个程序的Petri网模型,依靠Petri网的理论就能够分析和定为错误。该程序的Petri网模型如图1,当库所p8,p14,p15,p16同时都有标记时,Petri网中没有

文档评论(0)

130****9768 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档