http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx
Để tạo một semaphore, tôi cần cung cấp số lượng ban đầu và số lượng tối đa. MSDN nói rằng số lượng ban đầu là -
Số lượng yêu cầu ban đầu cho semaphore có thể được cấp đồng thời.
Trong khi nó nói rằng số lượng tối đa là
Số lượng yêu cầu tối đa cho semaphore có thể được cấp đồng thời.
Tôi có thể hiểu rằng số lượng tối đa là số luồng tối đa có thể truy cập đồng thời một tài nguyên. Nhưng, việc sử dụng số đếm ban đầu là gì?
Nếu tôi tạo một semaphore với số lượng ban đầu là 0 và số lượng tối đa là 2, không có chủ đề nào trong chuỗi threadpool của tôi có thể truy cập tài nguyên. Nếu tôi đặt số lượng ban đầu là 1 và số lượng tối đa là 2 thì chỉ luồng hồ bơi luồng mới có thể truy cập tài nguyên. Chỉ khi tôi đặt cả số lượng ban đầu và số lượng tối đa là 2, 2 luồng mới có thể truy cập tài nguyên đồng thời. Vì vậy, tôi thực sự bối rối về ý nghĩa của số lượng ban đầu?
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