現在のスレッドに割り込みフラグが設定されていて、動作がスレッドを一時停止して割り込みハンドラーを呼び出すのとは根本的に異なる場合、ブースト割り込みポイントは例外をスローします。ブーストのどちらのロックも、pthreadロックの動作に従う中断ポイントではありません。待機中にpthreadロックがシグナルハンドラーによって中断されると、ハンドラーが完了するまで待機し続けます。同様に、ブーストスレッドを中断としてマークするか、boost::mutex::lock()
待機boost::barrier::wait()
し続ける場合。
もう1つは、barrier::wait()
ロックを取得せずに途中で戻ることを許可した場合、例外をスローする前にバリアを待機しているスレッドのプールから現在のスレッドの登録を解除する必要があり、実装がより複雑になります。また、ロックを取得せずにlock / waitメソッドを返すことができるため、コードがより複雑になります。
一般的に、それは単にデザインの選択だと思います。
中断ポイントであるメソッドを見ると、通常、それらはより長い時間(boost::this_thread::sleep()
、 )スリープすることを意図しておりboost::condition_variable_any::wait()
、それらのコンポーネントもシグナルによって終了していることがわかります。ここでの例外は、割り込みポイントであるですが、信号を処理した後も待機し続けます。sleep
pthread_cond_wait
boost::thread::join()
pthread_join