ロックについて、そしてそれが正しく行われているかどうかについて質問があります。
クラスには、いくつかのメソッドで使用される静的ロックオブジェクトがあります。アクセス修飾子が適切に設定されていると仮定して、簡潔にするためにそれらをリストしません。
class Foo
{
static readonly object MyLock = new object();
void MethodOne()
{
lock(MyLock) {
// Dostuff
}
}
void MethodTwo()
{
lock(MyLock) {
// Dostuff
}
}
}
さて、私が理解しているように、ロックは一度に1つのスレッドだけがそれを取得して、1つのメソッドのDoStuff()部分に入ることができることを保証します。
しかし、同じスレッドがMethodOne()とMethodTwo()を同時に呼び出すことは可能ですか?彼が両方の方法で取得したロックを使用しているという意味ですか?
私の意図する機能は、このクラスの他のメソッドが現在実行されていない間、このクラスのすべてのメソッドは単一のスレッドによってのみ呼び出すことができるということです。
基本的な使用法は、単一のエントリと出口ポイントのみが必要なデータベースクラスです。SQL Compactを使用しているため、保護されたデータを読み取ろうとすると、あらゆる種類のメモリエラーが発生します。
データベースでメモリ例外が発生することがあり、それがどこから来ているのかわかりません。1つのスレッドがデータベースで複数のことを実行してから完了するためだと思いましたが、このコードは正常に機能しているようです。