次の方法で共有


同期オブジェクト

同期オブジェクト は、複数のスレッドの実行を調整するために 待機関数のいずれかでハンドルを指定できるオブジェクトです。 複数のプロセスが同じ同期オブジェクトへのハンドルを持つ可能性があり、プロセス間同期が可能になります。

次のオブジェクトの種類は、同期専用に提供されます。

種類 形容
出来事 イベントが発生したことを 1 つ以上の待機中のスレッドに通知します。 詳細については、「イベント オブジェクト 」を参照してください。
ミューテックス 一度に 1 つのスレッドのみが所有できるため、スレッドは共有リソースへの相互排他的アクセスを調整できます。 詳細については、「ミューテックス オブジェクト する」を参照してください。
セマフォ 0 から最大値までの数を保持し、共有リソースに同時にアクセスするスレッドの数を制限します。 詳細については、「セマフォ オブジェクトの」を参照してください。
待機可能タイマー 指定した時刻が到着したことを 1 つ以上の待機中のスレッドに通知します。 詳細については、「待機可能タイマー オブジェクト を参照してください。

 

他の用途でも使用できますが、次のオブジェクトを同期に使用することもできます。

オブジェクト 形容
変更通知 FindFirstChangeNotification 関数によって作成され、指定した種類の変更が指定されたディレクトリまたはディレクトリ ツリー内で発生すると、その状態がシグナル通知に設定されます。 詳細については、「ディレクトリ変更通知の取得 を参照してください。
コンソール入力 コンソールの作成時に作成されます。 コンソール入力へのハンドルは、CONIN$ が指定されている場合は CreateFile 関数、または GetStdHandle 関数によって返されます。 その状態は、本体の入力バッファーに未読入力がある場合はシグナルに設定され、入力バッファーが空の場合は非署名に設定されます。 コンソールの詳細については、「Character-Mode アプリケーションの」を参照してください。
仕事 CreateJobObject関数呼び出すことによって作成されます。 ジョブ・オブジェクトの状態は、指定されたジョブ終了時間制限を超えたために、すべてのプロセスが終了したときにシグナル通知に設定されます。 ジョブ オブジェクトの詳細については、「ジョブ オブジェクトの を参照してください。
メモリ リソース通知 CreateMemoryResourceNotification 関数によって作成されます。 その状態は、物理メモリ内で指定された種類の変更が発生したときにシグナル通知に設定されます。 メモリの詳細については、「メモリ管理」を参照してください。
過程 CreateProcess 関数を呼び出すことによって作成されます。 その状態は、プロセスの実行中に非署名に設定され、プロセスの終了時にシグナル通知に設定されます。 プロセスの詳細については、「プロセスとスレッドの」を参照してください。
CreateProcess、CreateThreadまたは CreateRemoteThread 関数呼び出して、新しいスレッドが作成されたときに作成されます。 その状態は、スレッドの実行中に非署名に設定され、スレッドが終了したときに signaled に設定されます。 スレッドの詳細については、「プロセスとスレッドの」を参照してください。

 

状況によっては、ファイル、名前付きパイプ、または通信デバイスを同期オブジェクトとして使用することもできます。ただし、この目的での使用はお勧めしません。 代わりに、非同期 I/O を使用し、OVERLAPPED 構造体で設定されたイベント オブジェクトを待機します。 同じファイル、名前付きパイプ、または通信デバイスで複数の同時重複操作が実行される場合に発生する可能性がある混乱のため、イベント オブジェクトを使用する方が安全です。 この状況では、オブジェクトの状態が通知される原因となった操作を知る方法はありません。

ファイル、名前付きパイプ、または通信に対する I/O 操作の詳細については、「同期と重複入力と出力のを参照してください。