亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

基于C#實現的多生產者多消費者同步問題實例

2020-01-24 02:26:04
字體:
來源:轉載
供稿:網友

本文實例講述了基于C#實現的多生產者多消費者同步問題,分享給大家供大家參考之用。具體代碼如下:

// 多個生產者和多個消費者,能生產n個產品的情況using System;using System.Threading;public class HoldIntegerSynchronized{ private int[] buffer; //緩沖區 private int occupiedBufferCount = 0; private int readPosition = 0 , writePosition = 0; //下一個讀到的位置和寫到的位置 public HoldIntegerSynchronized(int capacity){ buffer = new int[capacity]; }  public int BufferSize{ get{  return buffer.Length; } } public int Buffer{ get{  int bufferCopy;  // 加鎖  lock(this){  while(occupiedBufferCount == 0){ //多個消費者,所以此處改用while   Console.WriteLine(Thread.CurrentThread.Name + " tries to read. ");   DisplayState("Buffer Empty. " + Thread.CurrentThread.Name + " waits.");   Monitor.Wait(this);    // 為臨界區之外等待的生產者放行,讓他來"生產"   // 一直到生產者生產結束,調用了Monitor.PauseAll()   // 才能繼續執行下去,此時,消費者自動重新獲得this的鎖  }  --occupiedBufferCount;  bufferCopy = buffer[readPosition];  readPosition = (readPosition + 1) % buffer.Length;    DisplayState(Thread.CurrentThread.Name + " reads " + bufferCopy);  // 通知,讓等待的 生產者線程 進入Started狀態,如果生產者處于臨界區之外,這句話執行完后他仍然在臨界區之外  Monitor.PulseAll(this);  // 釋放鎖  }//lock  return bufferCopy; } set{  // 加鎖  lock(this){  while(occupiedBufferCount == buffer.Length){   Console.WriteLine(Thread.CurrentThread.Name + " tries to write. ");   DisplayState("Buffer Full. " + Thread.CurrentThread.Name + " waits.");   Monitor.Wait(this);    // 為臨界區之外等待消費者放行,讓他來"消費"   // 一直到消費者調用了Monitor.Pause()   // 才能繼續執行下去,此時,生產者自動重新獲得this的鎖  }  buffer[writePosition] = value;  ++occupiedBufferCount;   writePosition = (writePosition + 1) % buffer.Length;  DisplayState(Thread.CurrentThread.Name + " writes " + value);  // 通知,讓Wait狀態的 消費者 進入Started狀態,如果消費者處于臨界區之外,這句話執行完后他仍然在臨界區之外  Monitor.PulseAll(this);  // 釋放鎖  } } } public void DisplayState(string operation){ Console.Write("{0,-35}",operation); for(int i = 0; i < BufferSize; i++ ){  int a = readPosition;  int b = writePosition;  if( a <= i && i < b) {  Console.Write("{0,-9}",buffer[i]);  }else if( b < a && !( b <= i && i < a ) ){  Console.Write("{0,-9}",buffer[i]);  }else if( occupiedBufferCount == BufferSize){  Console.Write("{0,-9}",buffer[i]);  }else{  Console.Write("{0,-9}","");  } } Console.WriteLine("{0}/r/n",occupiedBufferCount); }}class Producer{ private HoldIntegerSynchronized sharedLocation; private Random randomSleepTime; public Producer(HoldIntegerSynchronized shared,Random random){ sharedLocation = shared; randomSleepTime = random; }  public void Produce(){ for (int count=0; count<3; count++) {  Thread.Sleep(randomSleepTime.Next(1,2000));  sharedLocation.Buffer = randomSleepTime.Next(5,10); } Console.WriteLine(Thread.CurrentThread.Name + " done producing./r/nTerminating " + Thread.CurrentThread.Name + "./r/n"); }}class Consumer{ private HoldIntegerSynchronized sharedLocation; private Random randomSleepTime; public Consumer(HoldIntegerSynchronized shared,Random random){ sharedLocation = shared; randomSleepTime = random; } public void Consume(){ int sum = 0; for (int count=0; count<4; count++) {  Thread.Sleep(randomSleepTime.Next(1,2000));  sum += sharedLocation.Buffer; } Console.WriteLine(Thread.CurrentThread.Name + " read values totaling:" + sum + "/r/nTerminating " + Thread.CurrentThread.Name + "."); } }class SharedCell{ static void Main(string[] args){ HoldIntegerSynchronized holdInteger = new HoldIntegerSynchronized(5); Random random = new Random(); Thread[] producerThreads = new Thread[4]; Thread[] consumerThreads = new Thread[3]; Console.Write("{0,-35}","Operation"); for(int i = 0;i < holdInteger.BufferSize;i++){  Console.Write("{0,-9}","Elem " + i); } Console.WriteLine("Occupied Count/r/n"); for(int i = 0; i < producerThreads.Length;i++){  Producer producer = new Producer(holdInteger,random);  producerThreads[i] = new Thread(new ThreadStart(producer.Produce));  producerThreads[i].Name = "Producer No." + i; } for(int i = 0; i < consumerThreads.Length;i++){  Consumer consumer = new Consumer(holdInteger,random);  consumerThreads[i] = new Thread(new ThreadStart(consumer.Consume));  consumerThreads[i].Name = "Consumer No." + i; } for(int i = 0; i < producerThreads.Length;i++){  producerThreads[i].Start(); } for(int i = 0; i < consumerThreads.Length;i++){  consumerThreads[i].Start(); } }}

希望本文所述對大家C#程序設計的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
懂色aⅴ精品一区二区三区蜜月| 国产偷国产偷亚洲清高网站| 亚洲精品成人网| 色妞一区二区三区| 97久久久免费福利网址| 亚洲精品动漫久久久久| 成人黄色av播放免费| 亚洲国产天堂网精品网站| 国产ts一区二区| 欧美精品18videos性欧美| 国产噜噜噜噜噜久久久久久久久| 日韩欧美精品中文字幕| 欧美一级片免费在线| 久久久精品2019中文字幕神马| 成人精品一区二区三区电影免费| 成人中文字幕在线观看| 国产精品永久免费视频| 91中文在线观看| 亚洲bt天天射| 亚洲一区二区免费| 色综久久综合桃花网| 中文字幕av一区二区三区谷原希美| 国产精品久久久久久久天堂| 国产精品久久久久久久久粉嫩av| 欧洲成人免费视频| 亚洲直播在线一区| 欧美大胆a视频| 91九色精品视频| 欧美国产日韩中文字幕在线| 欧美激情一二区| 亚洲精品久久久久久久久久久久久| 精品日本高清在线播放| 日韩高清有码在线| 91经典在线视频| 美女999久久久精品视频| 最近2019年手机中文字幕| 国产精品福利小视频| 亚洲二区中文字幕| xxx成人少妇69| 97成人精品视频在线观看| 日韩在线视频线视频免费网站| 国产成人精品在线播放| 中文字幕亚洲情99在线| 性欧美亚洲xxxx乳在线观看| 精品久久久久久亚洲精品| 国产精品高清网站| 一区二区三区高清国产| 国产伊人精品在线| 久久人人看视频| 欧美又大又粗又长| 亚洲国产欧美一区| 亚洲欧美在线x视频| 中文字幕日本精品| 大桥未久av一区二区三区| 国产亚洲精品综合一区91| 国产999精品| 欧美另类99xxxxx| 91精品久久久久久久久久另类| 亚洲综合色激情五月| 欧美黑人一区二区三区| 97久久精品人搡人人玩| 亚洲人成网站在线播| 欧美一区二区视频97| 日韩视频免费大全中文字幕| 亚洲综合日韩在线| 亚洲乱码av中文一区二区| 国产噜噜噜噜久久久久久久久| 国产成人综合av| 高跟丝袜一区二区三区| 97精品国产97久久久久久春色| 国产精品久久久久久久美男| 911国产网站尤物在线观看| 国产日韩欧美在线视频观看| 精品伊人久久97| 久久久久久91香蕉国产| 欧美一级片在线播放| 欧美日韩一区二区在线播放| 亚洲欧美在线一区| 亚洲欧美国产精品| 国产亚洲一区二区精品| 久久福利视频网| 91精品国产自产在线观看永久| 亚洲综合精品一区二区| 国产免费亚洲高清| 国产精品久久久久7777婷婷| 91久久久久久久| 亚洲欧洲在线看| 5252色成人免费视频| 国产精品欧美激情| 欧美精品www| 97香蕉超级碰碰久久免费软件| 国产精品一区二区性色av| 亚洲第一区第二区| 日韩av网站电影| 中文字幕日韩精品在线| 国产在线视频不卡| 国产精品视频永久免费播放| 精品国产欧美一区二区五十路| 国产欧美日韩丝袜精品一区| 国产欧美一区二区三区视频| 亚洲欧美日韩爽爽影院| 国产精品人人做人人爽| 日韩av影片在线观看| 色婷婷av一区二区三区在线观看| 亚洲一区二区久久| 日韩av一区二区在线观看| 欧美亚洲第一区| 国产精品美女免费| 91精品久久久久久久久久久久久| 成人黄色网免费| 日韩av电影在线免费播放| 97在线观看免费| 日韩免费精品视频| 欧美日韩中国免费专区在线看| 欧美精品18videosex性欧美| 91久久在线播放| 日韩精品亚洲精品| 久久精品99无色码中文字幕| 久久成年人视频| 亚洲欧美在线一区二区| 久久国产精品电影| 亚洲美女精品成人在线视频| 国产精品久久久久福利| 亚洲高清免费观看高清完整版| 欧美日本高清视频| 中文字幕亚洲图片| 欧美第一黄色网| 在线看片第一页欧美| 亚洲视频网站在线观看| 国产欧美日韩专区发布| 色yeye香蕉凹凸一区二区av| 亚洲精品wwwww| 欧美疯狂做受xxxx高潮| 亚洲а∨天堂久久精品9966| 欧美一区深夜视频| 中文字幕欧美日韩精品| 中文字幕精品在线| 成人精品视频99在线观看免费| 欧美日韩另类视频| 国产成人aa精品一区在线播放| 亚洲色图狂野欧美| 在线观看精品国产视频| 欧美日韩精品中文字幕| 国产精品高潮呻吟视频| 91精品国产自产在线观看永久| 国产一区二区三区18| 91美女片黄在线观看游戏| 欧美高清在线视频观看不卡| 91精品国产高清自在线| 国产精品三级在线| 亚洲成年人影院在线| 国产欧美日韩丝袜精品一区| 在线看福利67194| 69**夜色精品国产69乱| 97在线免费观看视频| 欧美一级淫片aaaaaaa视频| 91高清免费视频| 国产精品视频免费在线观看| 日韩视频免费大全中文字幕| 自拍偷拍亚洲一区| 97超碰色婷婷| 久久久久国产精品www| 中文字幕国产亚洲2019| 亚洲成年人影院在线|