osg*_*sgx 11 c++ exception-handling language-lawyer c++11 c++03
应该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评论状态版本5 N3249(2011):
GB 71 18.6.2.4 / 18.8.2.2 / 18.8.3.2
Run Code Online (Sandbox Code Playgroud)
的线程安全
std::set_new_handler(),std::set_unexpected(),std::set_terminate(),是不确定使得功能不可能一个线程安全的方式使用.必须指定函数的线程安全保证,并且应提供新接口,以便以线程安全的方式查询和安装处理程序.
LWG 1365 接受修改
见文件 N3189
eca*_*mur 10
17.6.4.7p4说:
调用
set_*和get_*函数不应导致数据竞争.对任何set_*函数的调用应与对相同set_*函数和相应get_*函数的后续调用同步.
这强烈暗示即使从不同的线程调用,set_*和get_*函数也在相同的全局状态下运行.18.8.3下的所有段落都讨论了" 当前的处理函数 ",没有提到线程; 这表明处理函数是程序整体的属性; 同样,17.6.4.7具有:
2 - C++程序可以在执行期间安装不同的处理函数[...]
3 - C++程序可以通过调用以下函数来获取指向当前处理函数的指针[...]
这些段落讨论了程序上下文中的当前处理函数,表明它是程序范围而不是线程局部的.
| 归档时间: |
|
| 查看次数: |
2968 次 |
| 最近记录: |