是否应该set_terminate
/get_terminate
为 C++ 2011 或 C++ 2003 中的多个线程设置不同的终止异常处理器?
例如,如果我有程序并将终止处理程序设置为func_1
;然后我启动 3 个线程。什么是新线程中的终止处理程序?如果在每个线程中我将终止处理程序设置为func_2
在第一个线程中,func_3
在第二个线程中等等。
N3242(C++ 2011 草案)[handler.functions]
在[support.exception]
/[exception.terminate]
PS:对于这些标准的任何流行实现,您可以回答 C++2011 或 C++2003
PPS:对此有 FCD 评论... C++ FCD 评论状态 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