C++ プログラミングガイド

マルチスレッド環境での例外の使用

現在の例外処理実装はマルチスレッド対応になっています。あるスレッド内の例外は、別のスレッドの例外を妨害することはありません。しかし、例外をスレッド間でやりとりすることはできません。これは、あるスレッドが送出した例外を別のスレッドで受け取ることができないためです。

各スレッドごとに独自の terminate() 関数や unexpected() 関数を設定することができます。set_terminate()set_unexpected() をあるスレッドで呼び出しても、その例外は呼び出し元のスレッドにだけ影響します。terminate() のデフォルトの関数は、メインスレッドであれば abort() で、その他のスレッドであれば thr_exit() です。「実行時のエラーの指定」を参照してください。


注 -

スレッドの取り消し (pthread_cancel(3T)) を行うと、スタック上の自動 (局所的で非静的) オブジェクトが破壊されます。スレッドが取り消されると、局所的デストラクタの実行の前に、ユーザーが pthread_cleanup_push() で登録した掃除用 (クリーンアップ) ルーチンが起動されます。特定のクリーンアップルーチンが登録された後に呼び出された関数の局所型オブジェクトは、ルーチンの実行前に破壊されます。