CCriticalSection クラス
更新 : 2007 年 11 月
"クリティカル セクション" を表します。これは、一度に 1 つのスレッドだけがリソースまたはコードのセクションにアクセスできるようにする同期オブジェクトです。
class CCriticalSection : public CSyncObject
解説
クリティカル セクションは、一度に 1 つのスレッドだけがデータやその他の制御されているリソースを変更できるようにするときに有用です。たとえば、リンク リストへのノードの追加は、一度に 1 つのスレッドだけが行うことができます。CCriticalSection オブジェクトを使ってリンク リストを制御すると、一度に 1 つのスレッドだけがリストにアクセスできるようになります。
メモ : |
---|
CCriticalSection クラスの機能は、実際の Win32 CRITICAL_SECTION オブジェクトで用意されます。 |
処理速度が要求され、リソースが複数のプロセスで使われていないときに、ミューテックスの代わりにクリティカル セクションを使います。ミューテックスについては、「CMutex クラス」を参照してください。
CCriticalSection オブジェクトの使用方式は、2 とおりあります。スタンドアロン方式、およびクラスに埋め込む方式です。
スタンドアロン方式 CCriticalSection オブジェクトをスタンドアロンで使うには、必要が生じたときに CCriticalSection オブジェクトを構築します。コンストラクタから正常に戻った後、Lock を呼び出してオブジェクトを明示的にロックします。クリティカル セクションへのアクセスが完了したら、Unlock を呼び出します。この方法はソース コードを読んだ人にはわかりやすいのですが、アクセスの前後でクリティカル セクションをロック、アンロックすることを覚えておかなければならないため、エラーを引き起こす傾向があります。
より望ましいのは、CSingleLock クラスを使う方法です。この場合も Lock メソッドおよび Unlock メソッドを使いますが、例外が発生したときにリソースのロックを解除する必要はありません。
埋め込み方式 CCriticalSection 型のデータ メンバをクラスに追加し、必要に応じてロックすると、複数のスレッドでクラスを共有することもできます。
CCriticalSection オブジェクトの使い方の詳細については、「マルチスレッド : 同期クラスの使用法」を参照してください。
必要条件
ヘッダー : afxmt.h