0

現在、いくつかのメソッドを使用してシングルトン クラスを実装する作業を行っています。各メソッドは、実際にはデータベースへの接続である同じプライベート フィールドを使用します。それぞれの方法で、リーダーは開かれようとしています。ご覧のとおり、これはアプリケーションのスコープ全体で共有される単一の接続です。リーダーが既に開いているときに Ado.Net でリーダー接続を開こうとすると、例外が発生します。このケースは、リーダーを開いた後に閉じるのを忘れた場合に発生する可能性がありますが、私の場合は複数のスレッドを使用していくつかのことを行うため発生します。

私の質問は: メソッドごとに異なるミューテックス オブジェクトを実装する必要がありますか、それともすべてのメソッドで共有される単一のオブジェクトで十分ですか?

シングルトンが良いパターンになることはめったにないことを私は知っています。また、共有接続が適切ではないことも知っていますが、私のプロジェクトは winforms プロジェクトであり、レガシーと見なされていることを覚えておいてください。私のクライアントも、アプリケーションの再設計にお金を払いたくありません。この場合、ミューテックスをどのように処理する必要があるかについての答えが欲しいだけです。

どうぞよろしくお願いいたします。

4

2 に答える 2

2

単一のミューテックスが必要です。単一の共有リソース (この場合はデータベース接続) を制御する複数のミューテックスがある場合、複数のスレッドが一度にアクセスでき、ミューテックスのポイントが無効になります。

于 2012-05-13T04:55:55.020 に答える
0

データベースへの各呼び出しが 1 つずつ実行されるように、同じオブジェクトを使用するすべてのメソッドをロックする必要があります。

各メソッドで接続を作成して閉じることは不可能ですか? ロックで振る舞いを修正しようとするよりも簡単だと思います:S

于 2012-05-13T04:54:38.977 に答える