4つのスレッド同期方法
スレッド同期の手法は4つあります。
- 排他制御:ミューテックス(Mutex)を利用することで、共有リソースへのアクセスを同一時刻に1つのスレッドに限定します。ミューテックスを取得したスレッドは、解放するまで他のスレッドによる共有リソースへのアクセスを待機させます。
- 条件変数:条件変数を用いることでスレッドの待ちと目覚め機構が実現される。あるスレッドが特定条件が満たされるのを待たなければならないとき、そのスレッドは条件変数の待ちメソッドを呼び出す。条件が満たされると、他のスレッドは条件変数の起こしメソッドを呼び出すことで待ち状態のスレッドを起こすことができる。
- セマフォ:セマフォを利用することで、共有リソースへのアクセスを制御します。セマフォはカウンタを管理し、カウンタが0より大きいときはスレッドは共有リソースにアクセスできます。カウンタが0のときはスレッドは、他のスレッドがリソースを解放するのを待ってからアクセスする必要があります。
- バリア:複数のスレッドはある地点で同期をとるようにバリア(Barrier)を使います。スレッドはバリアに到着したら、他のスレッドもバリアに到達するまで実行を待機する必要があります。バリアは、複数のスレッド間のデータ依存関係の解決に使用でき、すべてスレッドが完了してから特定の操作を実行するように保証します。