C#面试题更新 2026-08-05

请说明在 C# 中利用 SemaphoreSlim 进行并发访问控制的方法。

风险判断技术原理C#

考察说明

考查对 SemaphoreSlim 并发控制机制的理解及应用。

回答思路

  1. 【回答框架 1】SemaphoreSlim 是 C# 中的轻量级信号量,用于限制同时访问某资源的线程数。它内部维护一个计数器,每次 WaitAsync 或 Wait 调用会使计数器减一,若计数器为零则阻塞调用者;Release 调用使计数器加一,并唤醒等待者。
  2. 【回答框架 2】典型用法是创建 SemaphoreSlim 实例,初始计数和最大计数设为允许的并发数。在访问共享资源前调用 WaitAsync(异步)或 Wait(同步),使用后确保释放(Release),通常用 try-finally 或 using 模式避免死锁。
  3. 【回答框架 3】与 Semaphore 相比,SemaphoreSlim 更适合异步场景,提供 WaitAsync 方法,不占用线程池线程,性能更好。它不跨进程同步,仅限进程内。
  4. 【回答框架 4】控制并发时,需注意释放次数与获取次数匹配,否则计数衰减导致后续线程永久阻塞。
  5. 【回答框架 5】若需跨进程同步,应使用 Semaphore 或 SemaphoreSlim 的命名版本(如 Semaphore),而 SemaphoreSlim 不支持命名或跨进程。
  6. 【关键点 1】SemaphoreSlim 通过计数器限制并发访问数。
  7. 【关键点 2】使用 WaitAsync/Wait 获取,Release 释放,需成对出现。
  8. 【关键点 3】适用于异步场景,不跨进程。
  9. 【易错点 1】忘记 Release 导致死锁。
  10. 【易错点 2】错误使用释放次数导致计数不减。
  11. 【易错点 3】误用 SemaphoreSlim 做跨进程同步。