淺析c# 執行緒同步
同步是一種只允許一個執行緒在特定時間訪問某些資源的技術。沒有其他執行緒可以中斷,直到所分配的執行緒或當前訪問執行緒訪問資料完成其任務。
在多執行緒程式中,允許執行緒訪問任何資源所需的執行時間。執行緒共享資源並非同步執行。 訪問共享資源(資料)是有時可能會暫停系統的關鍵任務。所以可以通過執行緒同步來處理它。
主要場景如:存款,取款等交易業務處理。
執行緒同步的優點
- 一致性維護
- 無執行緒干擾
C#鎖定
使用 C# lock
關鍵字同步執行程式。它用於為當前執行緒鎖定,執行任務,然後釋放鎖定。它確保其他執行緒在執行完成之前不會中斷執行。
下面,建立兩個非同步和同步的例子。
C# 示例:非同步
在這個例子中,我們不使用鎖。此示例非同步執行。換句話說,執行緒之間存在上下文切換。
using System; using System.Threading; class Printer { public void PrintTable() { for (int i = 1; i <= 5; i++) { Thread t = Thread.CurrentThread; Thread.Sleep(200); Console.WriteLine(t.Name+" "+i); } } } class Program { public static void Main(string[] args) { Printer p = new Printer(); Thread t1 = new Thread(new ThreadStart(p.PrintTable)); Thread t2 = new Thread(new ThreadStart(p.PrintTable)); t1.Name = "Thread 1 :"; t2.Name = "Thread 2 :"; t1.Start(); t2.Start(); } }
執行上面示例程式碼,可以看到以下輸出結果 -
Thread 2 : 1
Thread 1 : 1
Thread 2 : 2
Thread 1 : 2
Thread 2 : 3
Thread 1 : 3
Thread 2 : 4
Thread 1 : 4
Thread 2 : 5
Thread 1 : 5
C# 執行緒同步示例
在這個例子中,我們使用lock
塊,因此示例同步執行。 換句話說,執行緒之間沒有上下文切換。在輸出部分,可以看到第二個執行緒在第一個執行緒完成任務之後開始執行。
using System; using System.Threading; class Printer { public void PrintTable() { lock (this) { for (int i = 1; i <= 5; i++) { Thread t = Thread.CurrentThread; Thread.Sleep(100); Console.WriteLine(t.Name + " " + i); } } } } class Program { public static void Main(string[] args) { Printer p = new Printer(); Thread t1 = new Thread(new ThreadStart(p.PrintTable)); Thread t2 = new Thread(new ThreadStart(p.PrintTable)); t1.Name = "Thread 1 :"; t2.Name = "Thread 2 :"; t1.Start(); t2.Start(); } }
執行上面示例程式碼,可以看到以下輸出結果 -
Thread 1 : 1
Thread 1 : 2
Thread 1 : 3
Thread 1 : 4
Thread 1 : 5
Thread 2 : 1
Thread 2 : 2
Thread 2 : 3
Thread 2 : 4
Thread 2 : 5
以上就是淺析c# 執行緒同步的詳細內容,更多關於c# 執行緒同步的資料請關注我們其它相關文章!