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
ミューテックス オブジェクトのセキュリティ属性。 この構造の詳細については、Windows SDK のStandard EditionCURITY_ATTRIBUTESを参照してください。
解説
オブジェクトにアクセスまたは解放CMutex
するには、CMultiLock または CSingleLock オブジェクトを作成し、その Lock および Unlock メンバー関数を呼び出します。 オブジェクトが CMutex
スタンドアロンで使用されている場合は、そのメンバー関数を Unlock
呼び出して解放します。
重要
オブジェクトを作成したCMutex
後、GetLastError を使用して、ミューテックスがまだ存在していないことを確認します。 ミューテックスが予期せず存在していた場合は、不正なプロセスがしゃがみ込み、ミューテックスを悪意を持って使用しようとしている可能性があることを示している可能性があります。 この場合、推奨されるセキュリティ意識の高い手順は、ハンドルを閉じて、オブジェクトの作成に失敗したかのように続行することです。
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示