在C++ 2011或C++ 2003中,set_terminate
/get_terminate
是否应为几个线程设置不同的终止异常处理器?
例如,如果我有一个程序并将终止处理程序设置为func_1
;然后我启动3个线程。新线程中的终止处理程序是什么?如果在每个线程中,我将终止处理程序分别设置为第一线程中的func_2
,第二线程中的func_3
等等。
N3242(C++ 2011草案)在[handler.functions]
或[support.exception]
/[exception.terminate]
中没有任何关于此的说明。
PS:您可以回答C++2011或C++2003,也可以回答这些标准的任何流行实现。
附注:这里有一个针对此问题的FCD评论...C++ FCD Comment Status Rev. 5 N3249 (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()”函数的线程安全性未指定,因此无法以线程安全的方式使用这些函数。 必须明确规定这些函数的线程安全保证,并提供新接口,使得可以以线程安全的方式查询和安装处理程序。 LWG 1365已经做了修改,接受了该建议。 请参阅文件N3189。