【发布时间】:2011-06-10 01:19:11
【问题描述】:
http://msdn.microsoft.com/en-us/library/system.threading.semaphoreslim.aspx
要创建信号量,我需要提供初始计数和最大计数。 MSDN 声明初始计数是 -
初始请求数 可以授予的信号量 同时。
虽然它声明最大计数是
请求的最大数量 可以授予的信号量 同时。
我可以理解,最大计数是可以同时访问资源的最大线程数。但是,初始计数有什么用?
如果我创建一个初始计数为 0 且最大计数为 2 的信号量,则我的线程池线程都无法访问该资源。如果我将初始计数设置为 1,最大计数设置为 2,那么只有线程池线程可以访问资源。只有当我将初始计数和最大计数都设置为 2 时,2 个线程才能同时访问资源。那么,我真的对初始计数的意义感到困惑吗?
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
【问题讨论】:
标签: c# multithreading concurrency semaphore