程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#多線程開發7:使用Monitor類同步多個線程

C#多線程開發7:使用Monitor類同步多個線程

編輯:C#入門知識

C#多線程開發7:使用Monitor類同步多個線程


在《使用lock語句同步多個線程》的文章中,使用lock語句同步多線程訪問臨界資源。

使用lock語句的代碼如下所示。

private static object o = new object();
lock (o)
{
     if (account >= 1000)
     {
         Thread.Sleep(10);//自動取款機打了個小盹
         account -= 1000;
         pocket += 1000;
     }
}

使用ILDASM工具查看上面代碼對應的IL代碼:

\

\ <喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+v8nS1Leiz9ajumxvY2vT777ksbu94s72zqq199PDTW9uaXRvcsDgtcRFbnRlcigpt723qLrNRXhpdCgpt723qKGjPC9wPgo8cD7PwsPmvs3AtL3pydzSu8/CTW9uaXRvcsDgysfI57rOvfjQ0Lbgz9+zzM2ssr21xKGjPC9wPgo8cD6199PDTW9uaXRvcsDgtcRFbnRlcigpt723qL/J0tS78cihwdm959fK1LS1xLbA1bzL+KO7tvi199PDTW9uaXRvcsDgtcRFeGl0KCm3vbeou+HKzbfFtsDVvMv4o6zNy7P2wdm958f4oaO1sdK7uPbP37PMyrnTw7bA1bzL+LXEt73KvbfDzsrXytS0yrGjrMbky/vP37PMvs2yu8Tct8POyrjD18rUtKGjy/nS1Mq508NNb25pdG9ywOC1xEVudGVyKCm3vbeous1FeGl0KCm3vbeov8nS1Mi3saPDv7TO1rvT0NK7uPbP37PMt8POysHZvefXytS0o6zS1LTvtb3NrLK9tuC49s/fs8y1xMS/tcShozwvcD4KPHA+z8LD5sq508NNb25pdG9ywOC4xNC0obbKudPDbG9ja9PvvuTNrLK9tuC49s/fs8yht9K7zsS1xMq+wP2zzNDyoaM8L3A+CjxwPjxwcmUgY2xhc3M9"brush:java;">using System; using System.Threading; namespace MonitorExample { class Program { static object o = new object(); static int account = 1000;//賬戶 static int pocket = 0;//口袋 static void Main(string[] args) { int threadCount = 10; var threads = new Thread[threadCount]; for (int i = 0; i < threadCount; i++) { threads[i] = new Thread(DoSafeWork); threads[i].Start(); } for (int i = 0; i < threadCount; i++) { threads[i].Join(); } Console.WriteLine("pocket=" + pocket); } public static void DoSafeWork() { Monitor.Enter(o); try { if (account >= 1000) { Thread.Sleep(10);//自動取款機打了個小盹 account -= 1000; pocket += 1000; } } finally { Monitor.Exit(o); } } } }程序執行結果如下圖所示。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved