Share via


CCriticalSection クラス

"クリティカル セクション" を表します。これは、一度に 1 つのスレッドだけがリソースまたはコードのセクションにアクセスできるようにする同期オブジェクトです。

class CCriticalSection : public CSyncObject

解説

クリティカル セクションは、一度に 1 つのスレッドだけがデータやその他の制御されているリソースを変更できるようにするときに有用です。 たとえば、リンク リストへのノードの追加は、一度に 1 つのスレッドだけが行うことができます。 CCriticalSection オブジェクトを使ってリンク リストを制御すると、一度に 1 つのスレッドだけがリストにアクセスできるようになります。

注意

CCriticalSection クラスの機能は、実際の Win32 CRITICAL_SECTION オブジェクトで用意されます。

処理速度が要求され、リソースが複数のプロセスで使われていないときに、ミューテックスの代わりにクリティカル セクションを使います。ミューテックスについては、「CMutex クラス」を参照してください。

2 つの方法を使用して、CCriticalSectionオブジェクト。スタンドアロンと埋め込みクラスで。

  • スタンドアロン方式   CCriticalSection オブジェクトをスタンドアロンで使うには、必要が生じたときに CCriticalSection オブジェクトを構築します。 コンストラクターから正常に戻った後、Lock を呼び出してオブジェクトを明示的にロックします。 クリティカル セクションへのアクセスが完了したら、Unlock を呼び出します。 この方法はソース コードを読んだ人にはわかりやすいのですが、アクセスの前後でクリティカル セクションをロック、アンロックすることを覚えておかなければならないため、エラーを引き起こす傾向があります。

    より望ましいのは、CSingleLock クラスを使う方法です。 この場合も Lock メソッドおよび Unlock メソッドを使いますが、例外が発生したときにリソースのロックを解除する必要はありません。

  • 埋め込み方式   CCriticalSection 型のデータ メンバーをクラスに追加し、必要に応じてロックすると、複数のスレッドでクラスを共有することもできます。

使用しての詳細についてはCCriticalSectionオブジェクトの資料を参照して「マルチ スレッド:同期クラスの使用方法

必要条件

**ヘッダー:**afxmt.h

参照

参照

CSyncObject クラス

階層図

CMutex クラス

その他の技術情報

CCriticalSection のメンバー