私はちょうどSemaphoreSlim
の学習を始めましたが、このプログラムではどのようにセマフォーカウントが増減しますか?私が理解しているように、semaphore.Wait()
が呼び出されると、リリースカウンタは1ずつ減り、semaphore.Release()
のときには2つのスレッドが実行されますが、semaphore.CurrentCount
はどのように増分されますか?それは0か1から始まるのですか?このコンテキストでは、semaphore.CurrentCountはどのように機能しますか?
var semaphore = new SemaphoreSlim(2, 10);
for (int i = 0; i < 20; i++)
{
Task.Factory.StartNew(() =>
{
Console.WriteLine("Entering task " + Task.CurrentId);
semaphore.Wait(); //releasecount--
Console.WriteLine("Processing task " + Task.CurrentId);
});
}
while (semaphore.CurrentCount <= 2)
{
Console.WriteLine("Semaphore count: " + semaphore.CurrentCount);
Console.ReadKey();
semaphore.Release(2);
}
Console.ReadKey();