Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Đồng bộ hóa luồng (Thread Synchronization) trong C#

Đồng bộ hóa đảm bảo nhiều luồng truy cập tài nguyên chung an toàn. C# cung cấp nhiều cơ chế:

1. lock statement (cơ bản, phổ biến nhất)

public class Demo
{
    private readonly object _lock = new object();
    
    public void Process()
    {
        lock (_lock)  // Chỉ 1 luồng vào được tại một thời điểm
        {
            // Critical section
        }
    }
}

2. Mutex (đồng bộ hóa giữa các tiến trình)

using System.Threading;

class Program
{
    // Mutex có tên - dùng cho inter-process sync
    private static Mutex _mutex = new Mutex(false, "Global\\MyAppMutex");
    
    static void Main()
    {
        Console.WriteLine("Đang chờ Mutex...");
        _mutex.WaitOne();  // Block cho đến khi có quyền
        
        Console.WriteLine("Đã có Mutex. Nhấn Enter để giải phóng...");
        Console.ReadLine();
        
        _mutex.ReleaseMutex();
    }
}

3. Monitor (cấp thấp hơn lock)

Monitor.Enter(_lock);
try { /* critical section */ }
finally { Monitor.Exit(_lock); }

4. Semaphore / SemaphoreSlim (giới hạn số luồng đồng thời)

// Cho phép tối đa 3 luồng cùng lúc
SemaphoreSlim semaphore = new SemaphoreSlim(3);

await semaphore.WaitAsync();
try { /* work */ }
finally { semaphore.Release(); }

So sánh nhanh

Cơ chếPhạm viDùng khi
lockTrong processĐơn giản, critical section ngắn
MutexCross-processĐồng bộ giữa nhiều ứng dụng
SemaphoreSlimTrong processGiới hạn độ song song (throttling)
ReaderWriterLockSlimTrong processĐọc nhiều, ghi ít