http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx
セマフォを作成するには、初期カウントと最大カウントを指定する必要があります。MSDNによると、初期カウントは-
同時に許可できるセマフォの最初の要求数。
最大数は
同時に許可できるセマフォのリクエストの最大数。
最大数は、リソースに同時にアクセスできるスレッドの最大数であることが理解できます。しかし、初期カウントの使用は何ですか?
初期カウントが0で最大カウントが2のセマフォを作成すると、どのスレッドプールスレッドもリソースにアクセスできなくなります。初期カウントを1に設定し、最大カウントを2に設定すると、スレッドプールスレッドのみがリソースにアクセスできます。初期カウントと最大カウントの両方を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