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

溫馨提示×

c#的線程間如何通信

c#
小樊
91
2024-09-23 18:40:41
欄目: 編程語言

在 C# 中,線程間通信可以通過以下幾種方式實現:

  1. 使用 lock 關鍵字lock 關鍵字可以用于同步代碼塊,確保同一時間只有一個線程可以訪問共享資源。當一個線程進入同步代碼塊時,其他線程必須等待該線程釋放鎖才能進入同步代碼塊。

    private object _lockObject = new object();
    
    public void ThreadMethod()
    {
        lock (_lockObject)
        {
            // 訪問共享資源
        }
    }
    
  2. 使用 MonitorMonitor 類提供了更高級的線程同步機制,包括等待和通知功能。可以使用 Monitor.Enter()Monitor.Exit() 方法來獲取和釋放鎖。

    private readonly object _lockObject = new object();
    
    public void ThreadMethod()
    {
        Monitor.Enter(_lockObject);
        try
        {
            // 訪問共享資源
        }
        finally
        {
            Monitor.Exit(_lockObject);
        }
    }
    
  3. 使用 SemaphoreSemaphore 類是一個計數信號量,用于控制同時訪問共享資源的線程數。可以使用 Semaphore.WaitOne()Semaphore.Release() 方法來請求和釋放許可。

    private readonly Semaphore _semaphore = new Semaphore(1);
    
    public void ThreadMethod()
    {
        _semaphore.WaitOne();
        try
        {
            // 訪問共享資源
        }
        finally
        {
            _semaphore.Release();
        }
    }
    
  4. 使用 Monitor.Wait()Monitor.Pulse() 方法Monitor.Wait() 方法用于讓當前線程等待,直到被其他線程通過 Monitor.Pulse()Monitor.PulseAll() 方法喚醒。Monitor.Pulse() 方法用于喚醒等待隊列中的一個線程,而 Monitor.PulseAll() 方法用于喚醒等待隊列中的所有線程。

    private readonly object _lockObject = new object();
    
    public void ThreadMethod1()
    {
        lock (_lockObject)
        {
            // 等待被喚醒
            Monitor.Wait(_lockObject);
        }
    }
    
    public void ThreadMethod2()
    {
        lock (_lockObject)
        {
            // 喚醒等待的線程
            Monitor.Pulse(_lockObject);
        }
    }
    
  5. 使用 MutexMutex 類是一個互斥量,用于確保同一時間只有一個線程可以訪問共享資源。可以使用 Mutex.WaitOne()Mutex.ReleaseMutex() 方法來請求和釋放互斥量。

    private readonly Mutex _mutex = new Mutex(true);
    
    public void ThreadMethod()
    {
        _mutex.WaitOne();
        try
        {
            // 訪問共享資源
        }
        finally
        {
            _mutex.ReleaseMutex();
        }
    }
    
  6. 使用 ChannelChannel 是 C# 7.0 引入的一種新型線程安全的數據結構,可以在不同的線程之間傳遞數據。可以使用 Channel.Create 方法創建一個通道,并使用 Channel.ReaderChannel.Writer 對象進行讀寫操作。

    private Channel<int> _channel = Channel.CreateUnbounded<int>();
    
    public async Task ThreadMethod1()
    {
        await _channel.Writer.WriteAsync(42);
    }
    
    public async Task ThreadMethod2()
    {
        int value = await _channel.Reader.ReadAsync();
        Console.WriteLine(value);
    }
    

0
泰来县| 海丰县| 湘阴县| 嵊泗县| 宁国市| 廊坊市| 五寨县| 竹北市| 砚山县| 来凤县| 黎城县| 旬邑县| 兴业县| 深泽县| 庄浪县| 平陆县| 连州市| 嘉义县| 南城县| 临潭县| 元朗区| 奉贤区| 南澳县| 和硕县| 承德市| 铜陵市| 临邑县| 宜阳县| 鸡东县| 井陉县| 司法| 江城| 长寿区| 大余县| 屯门区| 临夏市| 巢湖市| 大城县| 莱阳市| 平顺县| 衡东县|