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
{