可以把多线程比作马路,Semaphore比作红绿灯
比如马路有10车道,initialCount表示初次可通行数量,maximumCount最大可通行数量,比如设置为4,一次最多放4条,
主要方法
Semaphore(1, 4):默认一次只能释放一条线程。手动设置Release的一次最大个数是4条线程
WaitOne()阻塞线程,等灯来
Release(N) 同时放行条数,最大不能超过maximumCount
Close()释放所有
使用方式1
有10个线程,同时只执行3条线程,每完成一个就Release一个,等待中的就补上去
代码如下:
该代码会正常执行完成,并且释放所有线程,因为初始化话new Semaphore(1, 4)时候已经设置默认释放一条线程,这条线程执行完成后road.Release();又释放下一条。依次释放完所有线程。
Semaphore road = new Semaphore(1, 4); for(int i = 0; i < 10; i++) { new Thread(obj => { int se = (int)obj; Console.WriteLine(se); road.WaitOne(); Console.WriteLine("release{0}",obj); road.Release();//该线程执行完毕,后再释放一个线程 } ).Start(i); } Thread.Sleep(1000); //该代码会正常执行完成,并且释放说有线程,因为初始化话new Semaphore(1, 4)时候已经设置默认释放一条线程,这条线程执行完成后road.Release();又释放下一条。依次释放完所有线程。