线程通信——信号量与读写锁

3.信号量(Semaphore):控制同时访问共享资源的最大线程数。

3.1介绍

信号量是一种同步机制,可以控制同时访问共享资源的最大线程数。它通过维护一个计数器实现,信号量的计数器最大数代表可同时访问共享资源的线程数,线程调用WaitOne() 方法时,如果信号量计数器大于0,则计数器减1,并允许线程继续执行;若计数器为0,则线程被阻塞并等待其他线程释放信号量。通过调用 Release() 方法,可以增加信号量的计数值,从而允许一个或多个等待中的线程获取信号量并继续执行。

3.2应用

//用信号量限制
 #region 信号量的使用
 // 创建一个信号量,最大容量为3
 private static Semaphore _semaphore = new Semaphore(3, 3);//param1 初始值 param2 最大值
 private static void TestSemaphore()
 {
     for (int i = 0; i < 10; i++)
     {
         Thread t = new Thread(new ParameterizedThreadStart(ProcessSemaphore));
         t.Start(i);
     }
     Console.ReadKey();
 }
 private static void ProcessSemaphore(object threadId)
 {
     Console.WriteLine($"任务 {threadId} 正在等待信号量...");
     // 请求信号量
     _semaphore.WaitOne();
     try
     {