http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx
Um ein Semaphor zu erstellen, muss ich eine anfängliche und eine maximale Anzahl angeben. MSDN gibt an, dass eine anfängliche Zählung - ist
Die anfängliche Anzahl von Anforderungen für das Semaphor, die gleichzeitig gewährt werden können.
Während es angibt, dass die maximale Anzahl ist
Die maximale Anzahl von Anforderungen für das Semaphor, die gleichzeitig gewährt werden können.
Ich kann verstehen, dass die maximale Anzahl die maximale Anzahl von Threads ist, die gleichzeitig auf eine Ressource zugreifen können. Aber was nützt die anfängliche Zählung?
Wenn ich ein Semaphor mit einer anfänglichen Anzahl von 0 und einer maximalen Anzahl von 2 erstelle, kann keiner meiner Threadpool-Threads auf die Ressource zugreifen. Wenn ich die anfängliche Anzahl auf 1 und die maximale Anzahl auf 2 setze, kann nur der Thread-Pool-Thread auf die Ressource zugreifen. Nur wenn ich sowohl die anfängliche als auch die maximale Anzahl auf 2 festgelegt habe, können 2 Threads gleichzeitig auf die Ressource zugreifen. Also bin ich wirklich verwirrt über die Bedeutung der anfänglichen Zählung?
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