次の方法で共有


同期バリア

同期バリアを使用すると、すべてのスレッドが特定の実行ポイントに達するまで、複数のスレッドが待機してから、スレッドが続行されます。 プロセス間で同期バリアを共有することはできません。

同期バリアは、同じコードを並列で実行するスレッドがすべて 1 つのフェーズを完了してから次のフェーズに進む必要がある、段階的な計算に役立ちます。

同期バリアを作成するには、InitializeSynchronizationBarrier 関数を呼び出し、スレッドの最大数と、スレッドがブロックされるまでにスピンする回数を指定します。 次に、バリアを使用するスレッドを起動します。 各スレッドの作業が完了すると、EnterSynchronizationBarrier を呼び出してバリアで待機します。 EnterSynchronizationBarrier 関数は、バリアでブロックされているスレッドの数がバリアの最大スレッド数に達するまで各スレッドをブロックします。その時点で、EnterSynchronizationBarrier すべてのスレッドのブロックが解除EnterSynchronizationBarrier 関数は、バリア に入ったスレッドの 1 つだけに対して TRUE を返し、他のすべてのスレッド FALSE を返します。

不要になったときに同期バリアを解放するには、DeleteSynchronizationBarrier呼び出します。 EnterSynchronizationBarrier呼び出した直後にこの関数を呼び出しても問題ありません。これは、解放される前にすべてのスレッドがバリアの使用を完了していることを保証するためです。

同期バリアが削除されない場合、スレッドはバリアに入ったときに SYNCHRONIZATION_BARRIER_FLAGS_NO_DELETE フラグを指定できます。 バリアを使用するすべてのスレッドは、このフラグを指定する必要があります。スレッドがない場合、フラグは無視されます。 このフラグにより、関数は削除の安全性に必要な余分な作業をスキップし、パフォーマンスを向上させることができます。 このフラグが有効な間にバリアを削除すると、ハンドル アクセスが無効になり、1 つ以上の永続的にブロックされたスレッドが発生する可能性があることに注意してください。