次の方法で共有


CMutex クラス

更新 : 2007 年 11 月

"ミューテックス" を表します。これは、1 つのスレッドがリソースに排他アクセスできるようにする同期オブジェクトです。

class CMutex : public CSyncObject

解説

ミューテックスは、一度に 1 つのスレッドだけが、データ、またはほかの制御されたリソースをアクセスできるようにするときに有用です。たとえば、リンク リストへのノードの追加は、一度に 1 つのスレッドだけが行うことができます。CMutex オブジェクトを使ってリンク リストを制御すると、一度に 1 つのスレッドだけがリストにアクセスできるようになります。

CMutex オブジェクトを使うには、必要になったときに CMutex オブジェクトを構築します。待機するミューテックスの名前と、アプリケーションが最初にそれを所有するように指定します。コンストラクタから戻ると、ミューテックスにアクセスできます。制御対象になっているリソースのアクセスを終了したら CSyncObject::Unlock を呼び出します。

CMutex オブジェクトのもう 1 つの使い方は、制御するクラスのデータ メンバとして、CMutex 型の変数を追加することです。制御されるオブジェクトを構築するときに、ミューテックスを最初に所有するかどうか、ミューテックス名 (プロセス間にまたがって使用される場合)、適切なセキュリティ属性を指定して、CMutex データ メンバのコンストラクタを呼び出します。

この方法で CMutex オブジェクトが制御するオブジェクトにアクセスするには、まずリソースのアクセス メンバ関数に CSingleLock 型、または CMultiLock 型の変数を作成します。その後、ロック オブジェクトの Lock メンバ関数 (たとえば、CSingleLock::Lock) を呼び出します。この時点でスレッドは、リソースにアクセスできるようになるか、リソースが解放されてアクセスできるようになるまで待つか、リソースが解放されるのを待ってタイムアウトとなってリソースへのアクセスができないかのいずれかの状態になります。いずれの場合も、リソースはスレッド セーフな方法でアクセスされています。リソースを解放するには、ロック オブジェクトの Unlock メンバ関数 (たとえば、CSingleLock::Unlock) を呼び出すか、ロック オブジェクトがスコープ外になるようにします。

CMutex オブジェクトの使い方の詳細については、「マルチスレッド : 同期クラスの使用法」を参照してください。

必要条件

ヘッダー : afxmt.h

参照

参照

CSyncObject クラス

階層図

その他の技術情報

CMutex のメンバ