知识大全 C#多线程学习—生产者和消费者(3)

Posted 生产者

篇首语:送饥者一条鱼,只管一天不饿;教他学会捕鱼,能使他永不受饿。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 C#多线程学习—生产者和消费者(3)相关的知识,希望对你有一定的参考价值。

C#多线程学习—生产者和消费者(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    下面定义生产者类 CellProd 和消费者类 CellCons 它们都只有一个方法ThreadRun() 以便在Main()函数中提供给线程的ThreadStart代理对象 作为线程的入口

 public class CellProd      Cell cell; // 被操作的Cell对象      int quantity = ; // 生产者生产次数 初始化为

      public CellProd(Cell box int request)              //构造函数        cell = box;         quantity = request;             public void ThreadRun( )              for(int looper= ; looper<=quantity; looper++)            cell WriteToCell(looper); //生产者向操作对象写入信息     

public class CellCons      Cell cell;       int quantity = ;

      public CellCons(Cell box int request)                      //构造函数        cell = box;         quantity = request;             public void ThreadRun( )              int valReturned;        for(int looper= ; looper<=quantity; looper++)            valReturned=cell ReadFromCell( );//消费者从操作对象中读取信息     

    然后在下面这个类MonitorSample的Main()函数中 我们要做的就是创建两个线程分别作为生产者和消费者 使用CellProd ThreadRun()方法和CellCons ThreadRun()方法对同一个Cell对象进行操作

 public class MonitorSample      public static void Main(String[] args)              int result = ; //一个标志位 如果是 表示程序没有出错 如果是 表明有错误发生        Cell cell = new Cell( );

        //下面使用cell初始化CellProd和CellCons两个类 生产和消费次数均为 次        CellProd prod = new CellProd(cell );         CellCons cons = new CellCons(cell );

        Thread producer = new Thread(new ThreadStart(prod ThreadRun));        Thread consumer = new Thread(new ThreadStart(cons ThreadRun));        //生产者线程和消费者线程都已经被创建 但是没有开始执行         try                producer Start( );        consumer Start( );

        producer Join( );         consumer Join( );        Console ReadLine();                catch (ThreadStateException e)                //当线程因为所处状态的原因而不能执行被请求的操作        Console WriteLine(e);         result = ;                 catch (ThreadInterruptedException e)                //当线程在等待状态的时候中止        Console WriteLine(e);         result = ;                 //尽管Main()函数没有返回值 但下面这条语句可以向父进程返回执行结果        Environment ExitCode = result;     

    在上面的例程中 同步是通过等待Monitor Pulse()来完成的 首先生产者生产了一个值 而同一时刻消费者处于等待状态 直到收到生产者的 脉冲(Pulse) 通知它生产已经完成 此后消费者进入消费状态 而生产者开始等待消费者完成操作后将调用Monitor Pulese()发出的 脉冲

    它的执行结果很简单

      Produce   Consume   Produce   Consume   Produce   Consume   ……

      Produce   Consume

cha138/Article/program/net/201311/15265

相关参考

知识大全 C#多线程学习—生产者和消费者(1)

C#多线程学习—生产者和消费者(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 Java多线程--生产者与消费者

Java多线程--生产者与消费者  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  模拟生产者与消费

知识大全 由生产者/消费者问题看JAVA多线程

由生产者/消费者问题看JAVA多线程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  生产者消费者

知识大全 java多线程之消费者生产者模式

  /*@authorshijin*生产者与消费者模型中要保证以下几点*同一时间内只能有一个生产者生产    生产方法加锁sychronized*同一时间内只能

知识大全 Java多线程例子

Java多线程例子  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  写出一组模拟生产者/消费者的协

知识大全 C#创建多线程应用程序

C#创建多线程应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在NET和C#中编写一个多

知识大全 C#多线程编程实例

C#多线程编程实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  问题的提出  所谓单个写入程序

知识大全 详细讲解C#的多线程能力

详细讲解C#的多线程能力  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  线程是允许进行并行计算的

知识大全 C#多线程中lock的用法

C#多线程中lock的用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  经常碰到同时需要对某个

知识大全 C#中构建多线程应用程序

C#中构建多线程应用程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言  随着双核四核等多