成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

C#生產者和消費者

開發 后端
本文介紹定義C#生產者和消費者,它們都只有一個方法ThreadRun(),以便在Main()函數中提供給線程的ThreadStart代理對象,作為線程的入口。

下面定義C#生產者和消費者,它們都只有一個方法ThreadRun(),以便在Main()函數中提供給線程的ThreadStart代理對象,作為線程的入口。

  1. public class CellProd  
  2. {  
  3. Cell cell; // 被操作的Cell對象  
  4. int quantity = 1; // 生產者生產次數,初始化為1  
  5.  
  6. public CellProd(Cell box, int request)  
  7. {  
  8. //構造函數  
  9. cell = box;  
  10. quantity = request;  
  11. }  
  12. public void ThreadRun( )  
  13. {  
  14. for(int looper=1; looper<=quantity; looper++)  
  15. cell.WriteToCell(looper); //生產者向操作對象寫入信息  
  16. }  
  17. }  
  18.  
  19. public class CellCons  
  20. {  
  21. Cell cell;  
  22. int quantity = 1;  
  23.  
  24. public CellCons(Cell box, int request)  
  25. {  
  26. //構造函數  
  27. cell = box;  
  28. quantity = request;  
  29. }  
  30. public void ThreadRun( )  
  31. {  
  32. int valReturned;  
  33. for(int looper=1; looper<=quantity; looper++)  
  34. valReturned=cell.ReadFromCell( );//消費者從操作對象中讀取信息  
  35. }  

然后在下面這個類MonitorSample的Main()函數中,我們要做的就是創建兩個線程分別作為C#生產者和消費者,使用CellProd.ThreadRun()方法和CellCons.ThreadRun()方法對同一個Cell對象進行操作

  1. public class MonitorSample  
  2. {  
  3. public static void Main(String[] args)  
  4. {  
  5. int result = 0;   
  6. //一個標志位,如果是0表示程序沒有出錯,如果是1表明有錯誤發生  
  7. Cell cell = new Cell( );  
  8.  
  9. //下面使用cell初始化CellProd和CellCons兩個類,生產和消費次數均為20次  
  10. CellProd prod = new CellProd(cell, 20);  
  11. CellCons cons = new CellCons(cell, 20);  
  12.  
  13. Thread producer = new Thread(new ThreadStart(prod.ThreadRun));  
  14. Thread consumer = new Thread(new ThreadStart(cons.ThreadRun));  
  15. //生產者線程和消費者線程都已經被創建,但是沒有開始執行  
  16. try  
  17. {  
  18. producer.Start( );  
  19. consumer.Start( );  
  20.  
  21. producer.Join( );  
  22. consumer.Join( );  
  23. Console.ReadLine();  
  24. }  
  25. catch (ThreadStateException e)  
  26. {  
  27. //當線程因為所處狀態的原因而不能執行被請求的操作  
  28. Console.WriteLine(e);  
  29. result = 1;  
  30. }  
  31. catch (ThreadInterruptedException e)  
  32. {  
  33. //當線程在等待狀態的時候中止  
  34. Console.WriteLine(e);  
  35. result = 1;  
  36. }  
  37. //盡管Main()函數沒有返回值,但下面這條語句可以向父進程返回執行結果  
  38. Environment.ExitCode = result;  
  39. }  

在上面的例程中,同步是通過等待Monitor.Pulse()來完成的。首先生產者生產了一個值,而同一時刻消費者處于等待狀態,直到收到生產者的“脈沖(Pulse)”通知它生產已經完成,此后消費者進入消費狀態,而生產者開始等待消費者完成操作后將調用Monitor.Pulese()發出的“脈沖 ”。

事實上,這個簡單的例子已經幫助我們解決了多線程應用程序中可能出現的大問題,只要領悟了解決線程間沖突的基本方法,很容易把它應用到比較復雜的程序中去。以上介紹C#生產者和消費者。

【編輯推薦】

  1. C#結構體的特點淺析
  2. 介紹C#窗體拖動事件
  3. C#讀取Excel遇到無法讀取的解決方法
  4. 概述C#.NET操作XML
  5. C#基礎概念學習筆記
責任編輯:佚名 來源: IT168
相關推薦

2015-08-26 09:39:30

java消費者

2024-10-11 09:27:52

2021-12-22 11:00:05

模型Golang語言

2024-03-14 11:58:43

2012-02-14 12:31:27

Java

2017-05-16 12:30:21

Python多線程生產者消費者模式

2021-08-31 10:26:24

存儲

2021-04-20 08:32:51

消息MQ隊列

2024-08-27 10:19:31

2021-12-28 12:01:59

Kafka 消費者機制

2020-09-14 08:45:58

多線程模型面試

2023-06-01 08:08:38

kafka消費者分區策略

2015-06-15 11:29:34

數據中心綠色數據中心

2011-08-05 16:21:24

2011-07-22 16:25:38

CA TechnoloIT消費化

2022-07-07 09:00:49

RocketMQ消費者消息消費

2011-11-15 10:05:29

Kindle Fire平板市場

2015-06-29 15:00:20

云端數據消費者

2014-12-10 21:50:44

AdMaster

2015-08-31 10:45:02

數據
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品视频导航 | 日韩久久久久久久久久久 | 手机看黄av免费网址 | 国产欧美日韩一区 | 欧美成人免费在线 | 国产精品视屏 | 精品日韩一区二区三区av动图 | 国产精品久久久久久妇女6080 | 亚洲 精品 综合 精品 自拍 | 欧美精品在线一区 | 超碰国产在线 | 久久人爽爽人爽爽 | 国产精品视屏 | 色天堂影院| 国产精品久久久久久久久免费软件 | 精品福利在线 | www.久久| 日韩视频精品在线 | 一区二区三区在线免费看 | 亚洲午夜av久久乱码 | 中文字幕精品一区久久久久 | 伊人激情综合网 | 亚洲欧美日韩中文在线 | 亚洲一区二区三区免费在线 | 人人看人人搞 | 国产九九精品视频 | 在线视频亚洲 | 国产精品mv在线观看 | 69精品久久久久久 | 国产午夜精品一区二区三区嫩草 | 99re在线播放 | 欧美精品v国产精品v日韩精品 | 91精品综合久久久久久五月天 | 亚洲精品一区二区在线观看 | 国产精品视屏 | 午夜影院免费体验区 | 亚洲精品国产第一综合99久久 | 亚洲成人一区二区三区 | 精品久久久一区 | 国产午夜亚洲精品不卡 | 国内精品久久久久久久影视简单 |