Как указано в http://en.cppreference.com/w/cpp/error/terminate, есть много причин, чтобы вызвать terminate. Я могу представить себе случай, когда почти в одно и то же время некоторые из этих причин происходят в двух потоках.
Q1 Можно ли вызывать функцию завершения, установленную std::set_terminate
дважды или более одновременно, к тому же, когда я имею в виду второй вызов, прежде чем он закончится.
Thread1 Thread2
| |
_ |
t |
e |
r |
m |
i _
n t
a e
t r
e m
- ?
Q2 Если Q1 == YES, то что произойдет, если первое завершение закончится. Я думаю, если это закончится с std:: abort, то программа закончится, но что произойдет, если пользователь предоставит завершение, не прерывает программу?
Q3 Является ли функция завершения, установленная std::set_terminate
вызываемой в контексте потока, вызвавшей этот завершающий вызов?