SyncObjs.TCriticalSection
Contents |
Delphi の情報
ファイル SyncObjs.pas
TCriticalSection = class(TSynchroObject)
ユニット: SyncObjs
種類: クラス
継承クラスのメンバ: SyncObjs.TCriticalSection のメンバ
クラスのメソッド: SyncObjs.TCriticalSection のメソッド
クラスのフィールド: SyncObjs.TCriticalSection のフィールド
クラスのコンストラクタとデストラクタ: SyncObjs.TCriticalSection のコンストラクタ
C++ の情報
ファイル SyncObjs.hpp
TCriticalSection = class(TSynchroObject)
ユニット: SyncObjs
種類: クラス
継承クラスのメンバ: SyncObjs.TCriticalSection のメンバ
クラスのメソッド: SyncObjs.TCriticalSection のメソッド
クラスのフィールド: SyncObjs.TCriticalSection のフィールド
クラスのコンストラクタとデストラクタ: SyncObjs.TCriticalSection のコンストラクタ
説明
TCriticalSection は,マルチスレッドアプリケーションのスレッドで,ほかのスレッドがコードのブロックにアクセスするのを一時的に防ぐことができるようにします。
あるスレッドの処理が終了しないうちに,別のスレッドが特定のコードを同時に実行してしまうと,処理が混乱する可能性がある場合,TCriticalSection を使用することで特定の処理をほかのスレッドによる同時実行から保護できます。クリティカルセクションは,一度に 1 つのスレッドだけが入れるゲートのような役割を果たします。ただし,これらはほかのスレッドの同時実行をブロックするため,クリティカルセクションを多用すると性能が著しく低下する場合があります。
関連するすべてのスレッドから参照できないと意味を持たないため,クリティカルセクションはグローバルなスコープを持たなければなりません。クリティカルセクションによって保護されている処理に干渉する動作を持つすべてのスレッドは,必ず Acquire または Enter メソッドを呼び出してから実行する必要があります。クリティカルセクションを使用しないスレッドが存在すると,バグの原因となる場合があります。