C++2011またはC++2003のいくつかのスレッドに異なる終了例外プロセッサを設定する必要がありset_terminate
ますか?get_terminate
たとえば、プログラムがあり、terminateハンドラーをfunc_1
;に設定した場合。次に、3つのスレッドを開始します。新しいスレッドの終了ハンドラーとは何ですか?すべてのスレッドで、終了ハンドラーをfunc_2
最初のスレッド、func_3
2番目のスレッドなどに設定するとどうなりますか。
N3242(C ++ 2011ドラフト)は、/内また[handler.functions]
は[support.exception]
/内でそれについて何も述べていません[exception.terminate]
PS:これらの標準の一般的な実装については、C++2011またはC++2003について回答できます。
PPS:これにはFCDコメントがあります... C++FCDコメントステータスRev.5N3249(2011):
GB 71 18.6.2.4 / 18.8.2.2 / 18.8.3.2
std::set_new_handler()
、、、std::set_unexpected()
のスレッドセーフstd::set_terminate()
は指定されていないため、関数をスレッドセーフな方法で使用することはできません。関数のスレッドセーフ保証を指定する必要があり、スレッドセーフな方法でハンドラーを照会およびインストールできるようにするために、新しいインターフェイスを提供する必要があります。
LWG1365 は変更を加えて承認されました
論文 N3189を参照