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
mutex オブジェクトのセキュリティ属性。 この構造の詳細については、SECURITY_ATTRIBUTES SDK のWindowsしてください。

注釈

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

重要

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

こちらもご覧ください

CSyncObject クラス
階層図