日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

Lock“锁定”语句(C# 参考)

發(fā)布時間:2023/12/13 C# 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lock“锁定”语句(C# 参考) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

lock 關鍵字將語句塊標記為臨界區(qū),方法是獲取給定對象的互斥鎖,執(zhí)行語句,然后釋放該鎖。此語句的形式如下:

以帶有顏色區(qū)分的格式查看復制到剪貼板打印 Object thisLock = new Object(); lock (thisLock) {// Critical code section.} Object thisLock = new Object(); lock (thisLock) {// Critical code section.} 備注

lock 關鍵字可確保當一個線程位于代碼的臨界區(qū)時,另一個線程不會進入該臨界區(qū)。如果其他線程嘗試進入鎖定的代碼,則它將一直等待(即被阻止),直到該對象被釋放。

線程處理(C# 和 Visual Basic) 這節(jié)討論了線程處理。

lock 關鍵字在塊的開始處調用 Enter,而在塊的結尾處調用 Exit。

通常,應避免鎖定 public 類型,否則實例將超出代碼的控制范圍。 常見的結構 lock (this)lock (typeof (MyType))lock ("myLock") 違反此準則:

  • 如果實例可以被公共訪問,將出現 lock (this) 問題。

  • 如果 MyType 可以被公共訪問,將出現 lock (typeof (MyType)) 問題。

  • 由于進程中使用同一字符串的任何其他代碼都將共享同一個鎖,所以出現 lock(“myLock”) 問題。

最佳做法是定義 private 對象來鎖定, 或 private static 對象變量來保護所有實例所共有的數據。

示例

下面演示在 C# 中使用未鎖定的線程的簡單示例。

//using System.Threading;class ThreadTest{public void RunMe(){Console.WriteLine("RunMe called");}static void Main(){ThreadTest b = new ThreadTest();Thread t = new Thread(b.RunMe);t.Start();}}// Output: RunMe called //using System.Threading;class ThreadTest{public void RunMe(){Console.WriteLine("RunMe called");}static void Main(){ThreadTest b = new ThreadTest();Thread t = new Thread(b.RunMe);t.Start();}}// Output: RunMe called

下例使用線程和 lock。 只要 lock 語句存在,語句塊就是臨界區(qū)并且 balance 永遠不會是負數。

// using System.Threading;class Account{private Object thisLock = new Object();int balance;Random r = new Random();public Account(int initial){balance = initial;}int Withdraw(int amount){// This condition will never be true unless the lock statement// is commented out:if (balance < 0){throw new Exception("Negative Balance");}// Comment out the next line to see the effect of leaving out // the lock keyword:lock (thisLock){if (balance >= amount){Console.WriteLine("Balance before Withdrawal : " + balance);Console.WriteLine("Amount to Withdraw : -" + amount);balance = balance - amount;Console.WriteLine("Balance after Withdrawal : " + balance);return amount;}else{return 0; // transaction rejected}}}public void DoTransactions(){for (int i = 0; i < 100; i++){Withdraw(r.Next(1, 100));}}}class Test{static void Main(){Thread[] threads = new Thread[10];Account acc = new Account(1000);for (int i = 0; i < 10; i++){Thread t = new Thread(new ThreadStart(acc.DoTransactions));threads[i] = t;}for (int i = 0; i < 10; i++){threads[i].Start();}}}

轉載于:https://www.cnblogs.com/kingangWang/archive/2011/12/05/2276815.html

總結

以上是生活随笔為你收集整理的Lock“锁定”语句(C# 参考)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。