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