次のコードを使用して、リソースの使用を制限しています。
ときどき (正常に実行されてから 3 ~ 4 日後)、キューが空の例外が発生するか、返されたオブジェクトが null であることがわかります。
この Get メソッドに入るスレッドを 5 つだけに制限しているのでしょうか。
GetConnection が呼び出される場所では、ReleaseConnection も Final ブロック内で確実に呼び出されます。
各呼び出しで、私もログインしていません。キュー内のリソースの。キュー カウントが 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();
}
私の質問は、lock/Monitor を使用して、キュー (リソース インスタンス) へのアクセスを同期する必要がありますか?