一、简介
Semaphore类限制可同时访问某一资源或资源池的线程数。线程通过调用 WaitOne方法将信号量减1,并通过调用 Release方法把信号量加1。
构造函数:public Semaphore(int initialCount,int maximumCount);通过两个参数来设置信号的初始计数和最大计数。
二、例子
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading; 6 using System.Threading.Tasks; 7 8 namespace ThreadMutex 9 { 10 class Program 11 { 12 private static Mutex mutex = new Mutex(); 13 private static Semaphore semaphore = new Semaphore(3, 10); 14 private static int sum = 0; 15 static void Main(string[] args) 16 { 17 for (int i = 0; i < 10; i++) 18 { 19 Task<int> task = new Task<int>(ThreadFunction); 20 task.Start(); 21 } 22 Console.WriteLine($"{DateTime.Now} task started!"); 23 Console.Read(); 24 25 } 26 private static int ThreadFunction() 27 { 28 Thread.Sleep(100); 29 if(semaphore.WaitOne(2000)) 30 { 31 Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} get semaphore successed!"); 32 } 33 else 34 { 35 Console.WriteLine($"Thread {Thread.CurrentThread.ManagedThreadId} get semaphore failed!"); 36 } 37 38 return sum; 39 } 40 } 41 }
运行结果如下: