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
、「マルチスレッド: 同期クラスを使用する方法 」を参照してください。
継承階層
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してください。
注釈
オブジェクトにアクセスまたは解放するには CMutex
、 CMultiLock または CSingleLock オブジェクトを作成し、その Lock メンバー関数と Unlock メンバー関数 を 呼び出します。 オブジェクトが CMutex
スタンドアロンで使用されている場合は、そのメンバー関数を呼び Unlock
出して解放します。
重要
オブジェクトを作成した CMutex
後、 GetLastError を使用 してミューテックスが存在しなかったことを確認します。 ミューテックスが予期せず存在していた場合は、不正なプロセスがうわさであり、ミューテックスを悪意を持って使用する予定である可能性があります。 この場合、セキュリティを意識した手順として、ハンドルを閉じ、オブジェクトの作成に失敗した場合と同様に続行します。