亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

C#中如何實現線程同步

c#
小樊
84
2024-08-27 10:10:38
欄目: 編程語言

在C#中,可以使用多種方法來實現線程同步

  1. 使用lock關鍵字:

lock關鍵字可以確保一次只有一個線程訪問代碼塊。當一個線程已經獲得了鎖時,其他線程必須等待直到鎖被釋放。

class Program
{
    private static readonly object _lockObject = new object();

    static void Main(string[] args)
    {
        Task task1 = Task.Run(() => Work());
        Task task2 = Task.Run(() => Work());

        Task.WaitAll(task1, task2);
    }

    static void Work()
    {
        lock (_lockObject)
        {
            // 同步代碼
        }
    }
}
  1. 使用Monitor類:

Monitor類提供了一種顯式的方式來實現線程同步。與lock關鍵字類似,Monitor類也使用對象作為鎖。

class Program
{
    private static readonly object _lockObject = new object();

    static void Main(string[] args)
    {
        Task task1 = Task.Run(() => Work());
        Task task2 = Task.Run(() => Work());

        Task.WaitAll(task1, task2);
    }

    static void Work()
    {
        Monitor.Enter(_lockObject);
        try
        {
            // 同步代碼
        }
        finally
        {
            Monitor.Exit(_lockObject);
        }
    }
}
  1. 使用SemaphoreSemaphoreSlim類:

SemaphoreSemaphoreSlim類可以限制同時訪問特定代碼段的線程數量。這對于限制資源訪問(如數據庫連接)非常有用。

class Program
{
    private static readonly SemaphoreSlim _semaphore = new SemaphoreSlim(1, 1);

    static void Main(string[] args)
    {
        Task task1 = Task.Run(() => Work());
        Task task2 = Task.Run(() => Work());

        Task.WaitAll(task1, task2);
    }

    static async void Work()
    {
        await _semaphore.WaitAsync();
        try
        {
            // 同步代碼
        }
        finally
        {
            _semaphore.Release();
        }
    }
}
  1. 使用并發集合:

C#提供了一些線程安全的集合,如ConcurrentDictionaryConcurrentQueue等。這些集合在內部實現了線程同步,因此可以在多線程環境中安全地使用。

class Program
{
    private static readonly ConcurrentDictionary<int, int> _concurrentDictionary = new ConcurrentDictionary<int, int>();

    static void Main(string[] args)
    {
        Task task1 = Task.Run(() => Work());
        Task task2 = Task.Run(() => Work());

        Task.WaitAll(task1, task2);
    }

    static void Work()
    {
        // 使用線程安全的并發集合
        _concurrentDictionary.TryAdd(1, 1);
    }
}

這些方法可以幫助你在C#中實現線程同步。選擇哪種方法取決于你的需求和場景。

0
财经| 涿鹿县| 历史| 叙永县| 大足县| 河北区| 临洮县| 加查县| 新郑市| 吉安市| 临夏县| 潍坊市| 盈江县| 固安县| 沂南县| 温泉县| 乌海市| 鸡东县| 中方县| 盐亭县| 云安县| 绥德县| 松滋市| 铜梁县| 泰宁县| 七台河市| 石城县| 汉川市| 万年县| 全椒县| 化德县| 永昌县| 大同县| 通海县| 安庆市| 玉龙| 亚东县| 淄博市| 沙湾县| 湖北省| 阿图什市|