我正在使用以下代码来限制资源的使用。
偶尔(成功运行 3-4 天后)我得到队列空异常或返回的对象被发现为空。
我想知道我是否只限制 5 个线程进入这个 Get 方法,这是怎么发生的。
在调用 GetConnection 的地方,ReleaseConnection 也肯定是在 finally 块中调用的。
每次通话时,我也记录没有。队列中的资源。队列数似乎永远不会超过 5。
Semaphore smphSync = new Semaphore(0, 5);
Queue<IResource> resources;
private IResource GetResource()
{
smphSync.WaitOne();
IResource res = resources.Dequeue();
return res;
}
private ReleaseResource(IResource res)
{
resources.Enqueue(res);
smphSync.Release();
}
我的问题是,我是否需要使用锁/监视器来同步对队列(资源实例)的访问?