Monitor クラス
アセンブリ: mscorlib (mscorlib.dll 内)
構文
メモ |
---|
このクラスに適用される HostProtectionAttribute 属性の Resources プロパティの値は、Synchronization または ExternalThreading です。HostProtectionAttribute は、デスクトップ アプリケーション (一般的には、アイコンをダブルクリック、コマンドを入力、またはブラウザに URL を入力して起動するアプリケーション) には影響しません。詳細については、HostProtectionAttribute クラスのトピックまたは「SQL Server プログラミングとホスト保護属性」を参照してください。 |
Monitor クラスは、オブジェクトのロックをシングル スレッドに付与してオブジェクトへのアクセスを制御します。オブジェクトをロックすると、通常クリティカル セクションと呼ばれる、コード ブロックへのアクセスを制限できます。あるスレッドがオブジェクトのロックを所有している間、他のスレッドはそのロックを取得できません。Monitor を使用して、ロックの所有者が実行しているアプリケーション コードのセクションに、他のスレッドがアクセスできないようにすることもできます。ただし、これは、他のスレッドがロックされた別のオブジェクトを使用してコードを実行していない場合に限ります。
同期するオブジェクトにアクセスするスレッドが実行できるアクションについて、次の表で説明します。
Enter, TryEnter | オブジェクトのロックを取得します。このアクションは、クリティカル セクションの先頭もマークします。他のスレッドは、ロックされた別のオブジェクトを使用してクリティカル セクションで命令を実行している場合を除き、クリティカル セクションに入ることはできません。 |
オブジェクトのロックを解放して、他のスレッドがオブジェクトをロックしたりオブジェクトにアクセスできるようにします。呼び出し元のスレッドは、他のスレッドがオブジェクトにアクセスしている間待機します。パルス シグナルを使用して、オブジェクトの状態が変更されたことを待機中のスレッドに通知します。 | |
1 つ以上の待機中のスレッドにシグナルを送ります。このシグナルが、ロックされたオブジェクトの状態が変更されたことを待機中のスレッドに通知すると、ロックの所有者はロックを解放する準備をします。待機中のスレッドはオブジェクトの実行待ちキューに入り、最終的にオブジェクトのロックを受け取ることができます。ロックを取得したスレッドは、必要な状態に達しているかどうかを確認するためにオブジェクトの新しい状態をチェックできます。 | |
オブジェクトのロックを解放します。このアクションは、ロックされたオブジェクトによってプロテクトされるクリティカル セクションの末尾もマークします。 |
Enter メソッドと Exit メソッドを使用して、クリティカル セクションの先頭と末尾をマークします。クリティカル セクションが連続する命令のセットである場合は、Enter メソッドで取得したロックにより、ロックされたオブジェクトで囲まれたコードを 1 つのシングル スレッドだけが実行できるようになります。この場合は、try ブロックにこれらの命令を置いて、Exit 命令を finally ブロックに置くことをお勧めします。この機能は、通常、クラスの静的メソッドまたはインスタンス メソッドへのアクセスを同期するために使用されます。インスタンス メソッドに同期されたスレッド アクセスが必要な場合は、現在のインスタンスをロックするオブジェクトとして使用して、Enter メソッドと、対応する Exit メソッドを呼び出します。1 つのスレッドだけが現在のインスタンスのロックを保持できるため、このメソッドを実行できるのは、一度に 1 つのスレッドだけです。静的メソッドは、現在のインスタンスの Type をロックされたオブジェクトとして使用するのと同じ方法でプロテクトされます。Enter および Exit メソッドによって提供される機能は、C# lock ステートメント (Visual Basic の場合は SyncLock) によって提供される機能と似ています。唯一の相違点は、lock および SyncLock がモニタを確実に解放するために、Exit メソッドを try...finally ブロック (Visual Basic の場合は Try...Finally) 内にラップすることです。
クリティカル セクションの範囲がメソッド全体にわたる場合、前のロック機能は System.Runtime.CompilerServices.MethodImplAttribute をメソッドに配置し、MethodImplAttribute のコンストラクタの Synchronized 値を指定して実行できます。この属性を使用する場合は、Enter ステートメントと Exit ステートメントは不要です。この属性によって、現在のスレッドはメソッドから制御が戻るまでロックを保持します。ロックがすぐに解放できる場合は、この属性ではなく、Monitor クラスまたは C# lock ステートメントを使用します。
特定のオブジェクトをロックおよび解放する Enter ステートメントと Exit ステートメントは、メンバの境界またはクラスの境界、またはその両方を超えることはできますが、この方法はお勧めできません。
同期対象のオブジェクトを選択する場合は、プライベート オブジェクトまたは内部オブジェクトだけをロックする必要があります。外部オブジェクトをロックすると、デッドロックが発生します。これは関連のないコードが別の目的のために同じオブジェクトのロックを選択するためです。
System.Threading.Monitor
プラットフォーム
Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
参照
Weblioに収録されているすべての辞書からMonitor クラスを検索する場合は、下記のリンクをクリックしてください。
全ての辞書からMonitor クラスを検索
- Monitor クラスのページへのリンク