http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx
Per creare un semaforo, devo fornire un conteggio iniziale e un conteggio massimo. MSDN afferma che un conteggio iniziale è:
Il numero iniziale di richieste per il semaforo che possono essere concesse contemporaneamente.
Mentre afferma che il conteggio massimo è
Il numero massimo di richieste per il semaforo che possono essere concesse contemporaneamente.
Posso capire che il conteggio massimo è il numero massimo di thread che possono accedere a una risorsa contemporaneamente. Ma a cosa serve il conteggio iniziale?
Se creo un semaforo con un conteggio iniziale di 0 e un conteggio massimo di 2, nessuno dei miei thread del pool di thread è in grado di accedere alla risorsa. Se imposto il conteggio iniziale come 1 e il conteggio massimo come 2, solo il thread del pool di thread può accedere alla risorsa. È solo quando imposto sia il conteggio iniziale che il conteggio massimo su 2, 2 thread sono in grado di accedere alla risorsa contemporaneamente. Quindi, sono davvero confuso sul significato del conteggio iniziale?
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