Должен ли 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