
「セマフォ」クラスCSemaphoreオブジェクトを表す ? リソースにアクセスする 1 つまたは複数のプロセスで、限られた数のスレッドが同期オブジェクト。現在、指定したリソースをアクセスするスレッドの数は、 CSemaphoreオブジェクトを維持します。
セマフォはのみ限られた数のユーザーをサポートする共有リソースへのアクセスを制御するのに便利です。CSemaphoreオブジェクトの現在のカウントできる追加ユーザー数です。カウントがゼロにすると、すべての試みは、 CSemaphoreオブジェクトによって制御されるリソースを使用する、システム キューに挿入されるまでのタイムアウトを待つや 0 以上の数の上昇します。CSemaphoreオブジェクトの構築中に、制御されるリソースが同時にアクセスできるユーザーの最大数を指定します。
CSemaphoreオブジェクトを使用するには、それが必要な場合、 CSemaphoreオブジェクトを構築します。待機するセマフォの名前を指定し、アプリケーションが最初所有する必要があります。コンス トラクターが返されるとき、セマフォをアクセスできます。完了したら、 CSyncObject::Unlockを呼び出す、制御されるリソースへのアクセス。
CSemaphoreオブジェクトを使用する別の方法を制御したいクラスにデータ メンバーとして型CSemaphoreの変数を追加することです。制御されるオブジェクトの構築時に、初期アクセス数、最大アクセス数、セマフォ、(プロセス境界間で使用する場合) の名前を指定して、必要なセキュリティ属性、 CSemaphoreデータ メンバーのコンス トラクターを呼び出す。
この方法ではCSemaphoreオブジェクトによってリソース コントロールにアクセスするには、 CSingleLockいずれかの型の変数を作成する最初 またはCMultiLockを入力 をリソースのアクセス メンバー関数。ロック オブジェクトのLockメンバー関数 (たとえば、 CSingleLock::Lock) を呼び出してください。この時点で、スレッドはリソースへのアクセスを得るためがリソースの解放されるとアクセス、またはリリースされるリソースと時間をリソースへのアクセスに失敗するを待つを待ちます。いずれの場合では、リソースがスレッド セーフな方法でアクセスされました。リソースを解放するには、ロック オブジェクトのロックを解除するメンバー関数 (たとえば、 CSingleLock::Unlock) を使用するか、スコープ外には、ロック オブジェクトを許可。
また、スタンドアロン、 CSemaphoreオブジェクトを作成し、制御されるリソースにアクセスしようとする前に明示的にアクセスできます。このメソッドより明確に誰かがあなたのソースコードを読みながらよりエラーになります。
CSemaphoreオブジェクトを使用する方法の詳細については、参照してください 「マルチ スレッド: 同期クラスの使用方法でVisual の C++ プログラマのガイド。
#include lt;afxmt.h>
サンプル特価; MFC サンプル ミュー テックス(&N)