http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx
Untuk membuat semaphore, saya perlu memberikan hitungan awal dan hitungan maksimal. MSDN menyatakan bahwa hitungan awal adalah -
Jumlah awal permintaan untuk semaphore yang dapat diberikan secara bersamaan.
Sementara itu menyatakan bahwa jumlah maksimumnya adalah
Jumlah maksimum permintaan untuk semaphore yang dapat diberikan secara bersamaan.
Saya dapat memahami bahwa jumlah maksimum adalah jumlah maksimum utas yang dapat mengakses sumber daya secara bersamaan. Tapi, apa gunanya hitungan awal?
Jika saya membuat semaphore dengan jumlah awal 0 dan jumlah maksimum 2, tidak ada utas threadpool saya yang dapat mengakses sumber daya. Jika saya menetapkan jumlah awal sebagai 1 dan jumlah maksimum sebagai 2 maka hanya thread pool thread yang dapat mengakses sumber daya. Hanya ketika saya menetapkan jumlah awal dan jumlah maksimum sebagai 2, 2 utas dapat mengakses sumber daya secara bersamaan. Jadi, saya benar-benar bingung tentang pentingnya hitungan awal?
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