.NET 中的并发控制机制

  1. 锁机制
    • lock 语句:一种简单且常用的同步机制,用于确保同一时间只有一个线程可以执行锁定区域内的代码,底层基于 Monitor 类实现。
    • Monitor 类:提供了更细粒度的锁控制,可手动进入和退出锁定状态,还支持线程等待和唤醒操作。
    • Mutex 类:互斥体,可用于跨进程的线程同步,确保同一时间只有一个线程或进程可以访问共享资源。
  2. 信号量
    • Semaphore 类:用于控制对有限资源的并发访问,通过计数器表示可用资源数量,线程访问资源前需请求信号量。
    • SemaphoreSlim 类:轻量级的信号量实现,适用于在同一进程内进行资源访问控制,性能较高。
  3. 读写锁
    • ReaderWriterLockSlim 类:允许多个线程同时进行读操作,但在有线程进行写操作时,会阻止其他线程进行读或写操作,适用于读多写少的场景。
  4. 原子操作
    • Interlocked 类:提供了一系列原子操作方法,如递增、递减、交换等,可用于实现简单的并发控制,避免使用锁带来的开销。
  5. 线程同步构造
    • ManualResetEvent 和 ManualResetEventSlim:用于线程间的同步,ManualResetEvent 可手动设置为有信号或无信号状态,以控制线程的阻塞和继续执行;ManualResetEventSlim 是轻量级版本。
    • AutoResetEvent:与 ManualResetEvent 类似,但在有线程收到信号后会自动将状态重置为无信号。
    • CountdownEvent:允许一个或多个线程等待,直到指定数量的操作完成。
    • Barrier:用于同步多个线程,当一组线程都到达某个点后,所有线程才可以继续执行。
  6. 并发集合
    • ConcurrentDictionary<TKey, TValue>:线程安全的字典集合,可在多线程环境下进行高效的读写操作。
    • ConcurrentQueue:线程安全的队列集合,遵循先进先出(FIFO)原则。
    • ConcurrentStack:线程安全的栈集合,遵循后进先出(LIFO)原则。
    • BlockingCollection:可阻塞的集合,结合了生产者 - 消费者模式,当集合为空或满时,线程会自动阻塞。
  7. 异步编程中的并发控制
    • Task 和 Task:用于实现异步操作,可通过 Task.WaitAll、Task.WhenAll 等方法实现多个任务的同步执行。
    • SemaphoreSlim 在异步中的应用:可用于控制异步任务的并发数量,避免过多任务同时执行导致资源耗尽。
    • AsyncLock(自定义):用于在异步代码中实现锁机制,确保异步操作的线程安全。
  8. 软件事务内存相关(.NET 未原生支持,但可借助第三方库)
    • 在一些第三方库中可以实现类似软件事务内存(STM)的功能,将一系列操作封装成事务,确保事务内的操作要么全部成功,要么全部失败。 -

posted on 2025-02-05 17:44  HutatsuiwaKaede  阅读(20)  评论(0编辑  收藏  举报

导航