Должен ли set_terminate
/get_terminate
установить другой обработчик исключений для нескольких потоков в С++ 2011 или С++ 2003?
например. если у меня есть программа и устанавливает обработчик завершения на func_1
; затем я запускаю 3 потока. Что прекращают обработчики в новых потоках? Что, если в каждом потоке я установлю обработчик завершения на func_2
в первом потоке, func_3
во втором потоке и так далее.
N3242 (проект С++ 2011) ничего не говорит об этом в [handler.functions]
или в [support.exception]
/[exception.terminate]
PS: вы можете ответить на С++ 2011 или для С++ 2003 для любой популярной реализации этих стандартов
PPS: есть комментарий FCD для этого... С++ 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