http://msdn.microsoft.com/en-us/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
initialCount
参数的含义。 - Michał Turczyn