CMutex クラス

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

構文

class CMutex : public CSyncObject

メンバー

パブリック コンストラクター

名前 説明
CMutex::CMutex CMutex オブジェクトを構築します。

解説

ミューテックスは、データまたはその他の制御されたリソースの変更を一度に 1 つのスレッドしか許可できない場合に便利です。 たとえば、リンク リストにノードを追加するプロセスは、一度に 1 つのスレッドでのみ許可する必要があります。 オブジェクトを CMutex 使用してリンク リストを制御すると、一度に 1 つのスレッドのみがリストにアクセスできます。

オブジェクトを CMutex 使用するには、必要に応じオブジェクトを CMutex 構築します。 待機するミューテックスの名前を指定し、アプリケーションが最初にミューテックスを所有する必要があることを指定します。 コンストラクターが戻ったときにミューテックスにアクセスできます。 制御されたリソースへのアクセスが完了したら、CSyncObject::Unlock を呼び出します。

オブジェクトを使用 CMutex する別の方法は、制御するクラスにデータ メンバーとして型 CMutex の変数を追加することです。 制御されたオブジェクトの構築中に、ミューテックスが最初に所有されているかどうかを指定するデータ メンバーの CMutex コンストラクター、ミューテックスの名前 (プロセスの境界を越えて使用される場合)、および必要なセキュリティ属性を呼び出します。

この方法でオブジェクトによって制御されるCMutexリソースにアクセスするには、まず、リソースのアクセス メンバー関数に CSingleLockまたは CMultiLockの変数を作成します。 次に、ロック オブジェクトのLockメンバー関数 (CSingleLock::Lock など) を呼び出します。 この時点で、スレッドはリソースへのアクセス権を取得するか、リソースが解放されてアクセスを得るのを待つか、リソースが解放されてタイムアウトするのを待ち、リソースへのアクセスが失敗します。 いずれの場合も、リソースにはスレッド セーフな方法でアクセスされています。 リソースを解放するには、ロック オブジェクトのUnlockメンバー関数 (CSingleLock::Unlock など) を使用するか、ロック オブジェクトがスコープから外れるようにします。

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

継承階層

CObject

CSyncObject

CMutex

必要条件

ヘッダー: afxmt.h

CMutex::CMutex

名前付きオブジェクトまたは名前のないオブジェクトを CMutex 構築します。

CMutex(
    BOOL bInitiallyOwn = FALSE,
    LPCTSTR lpszName = NULL,
    LPSECURITY_ATTRIBUTES lpsaAttribute = NULL);

パラメーター

bInitiallyOwn
オブジェクトを作成する CMutex スレッドが、ミューテックスによって制御されるリソースに最初にアクセスできるかどうかを指定します。

lpszName
CMutex オブジェクトの名前。 同じ名前の別のミューテックスが存在する場合、 オブジェクトがプロセス境界を越えて使用される場合は、lpszName を指定する必要があります。 NULL の場合、ミューテックスは名前なしになります。 名前が既存のミューテックスと一致する場合、コンストラクターは、その名前のミューテックスを参照する新しい CMutex オブジェクトを構築します。 名前がミューテックスではない既存の同期オブジェクトと一致する場合、構築は失敗します。

lpsaAttribute
ミューテックス オブジェクトのセキュリティ属性。 この構造の詳細については、Windows SDK のStandard EditionCURITY_ATTRIBUTESを参照してください

解説

オブジェクトにアクセスまたは解放CMutexするには、CMultiLock または CSingleLock オブジェクトを作成し、その Lock および Unlock メンバー関数を呼び出します。 オブジェクトが CMutex スタンドアロンで使用されている場合は、そのメンバー関数を Unlock 呼び出して解放します。

重要

オブジェクトを作成したCMutex後、GetLastError を使用して、ミューテックスがまだ存在していないことを確認します。 ミューテックスが予期せず存在していた場合は、不正なプロセスがしゃがみ込み、ミューテックスを悪意を持って使用しようとしている可能性があることを示している可能性があります。 この場合、推奨されるセキュリティ意識の高い手順は、ハンドルを閉じて、オブジェクトの作成に失敗したかのように続行することです。

関連項目

CSyncObject クラス
階層図