std::promise
имеет интересную функцию-член set_value_at_thread_exit
:
Состояние готово, когда текущий поток завершается, после всех переменных с длительностью локального хранилища потока были уничтожены. (выделено мной)
Я знал: используя thread_local X var;
, мы можем организовать задачу, выполняемую в X::~X()
когда текущий поток завершается.
Однако я не знаю: как организовать выполнение задачи после того, как все переменные с длительностью локального хранилища потока были уничтожены ?
Тривиальное, уродливое, но возможное решение: запускает новый поток и joining
текущий поток, после возврата joining
новый поток может безопасно выполнить задачу.
Как реализовать функцию в Win32 API и POSIX API соответственно?