91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
广州市| 嘉鱼县| 郓城县| 盐城市| 日土县| 图木舒克市| 建德市| 津南区| 永靖县| 黄骅市| 望都县| 郎溪县| 靖边县| 武义县| 湖南省| 宣汉县| 青浦区| 临沭县| 汤阴县| 清镇市| 丁青县| 西畴县| 会宁县| 靖江市| 凤城市| 万全县| 措美县| 山阳县| 灵宝市| 临颍县| 磐石市| 乌拉特后旗| 连城县| 乃东县| 奉节县| 常宁市| 隆德县| 西城区| 邵阳县| 丽江市| 昔阳县|