http://msdn.microsoft.com/zh-CN/library/system.threading.semaphoreslim.aspx
要创建信号灯,我需要提供一个初始计数和最大计数。MSDN指出,初始计数为-
可以同时授予的信号量请求的初始数量。
虽然它指出最大数量是
可以同时授予的信号量请求的最大数量。
我可以理解,最大数量是可以同时访问资源的最大线程数。但是,初始计数的用途是什么?
如果我创建的信号量的初始计数为0,最大计数为2,则我的线程池线程都无法访问该资源。如果将初始计数设置为1,最大计数设置为2,则只有线程池线程可以访问资源。仅当我将初始计数和最大计数都设置为2时,两个线程才能够同时访问资源。那么,我真的对初始计数的重要性感到困惑吗?
SemaphoreSlim semaphoreSlim = new SemaphoreSlim(0, 2); //all threadpool threads wait
SemaphoreSlim semaphoreSlim = new SemaphoreSlim(1, 2);//only one thread has access to the resource at a time
SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2, 2);//two threadpool threads can access the resource concurrently