建站工具有哪些社区,广州建站外包,成品网站源码,免费做网站电话参考博客#xff1a;http://www.cnblogs.com/free722/archive/2011/04/03/2004926.html http://www.cnblogs.com/heqichang/archive/2011/12/24/2300301.html 信号量说简单点就是为了线程同步#xff0c;或者说是为了限制线程能运行的数量。 那它又是怎么限制线程的数量的哩http://www.cnblogs.com/free722/archive/2011/04/03/2004926.html http://www.cnblogs.com/heqichang/archive/2011/12/24/2300301.html 信号量说简单点就是为了线程同步或者说是为了限制线程能运行的数量。 那它又是怎么限制线程的数量的哩是因为它内部有个计数器比如你想限制最多5个线程运行那么这个计数器的值就会被设置成5如果一个线程调用了 这个Semaphore那么它的计数器就会相应的减1直到这个计数器变为0。这时如果有另一个线程继续调用这个Semaphore那么这个线程就 会被阻塞。 获得Semaphore的线程处理完它的逻辑之后你就可以调用它的Release()函数将它的计数器重新加1这样其它被阻塞的线程就可以得到调用了。 class SemaphoreDemo{static Semaphore semaphore;static void Main(string[] args){//创建一个限制资源类//资源数为5开放资源数为2//主线程自动占有3个资源semaphore new Semaphore(2, 5);//开启3个线程让它们竞争剩余的2个资源for (int i 0; i 3; i){Thread t new Thread(new ParameterizedThreadStart(WorkerProc));t.Name Thread i;t.Start(t.Name);}System.Console.ReadKey();}static void WorkerProc(Object obj){Console.WriteLine(string.Format(线程{0}准备执行,obj));semaphore.WaitOne();Console.WriteLine(string.Format(线程{0}开始执行了停留5秒钟, obj));Thread.Sleep(5000);Console.WriteLine(string.Format(线程{0}执行结束了释放信号量, obj));semaphore.Release();} 转载于:https://www.cnblogs.com/zyhblogs/p/4002046.html