void notify_all_at_thread_exit(condition_variable& cond, unique_lock<mutex> lk);
Effects: Передает право владения блокировкой, связанной с, lk во внутреннюю память и расписания, cond чтобы получать уведомления, когда текущий поток завершается, после того, как все объекты продолжительности хранения потока, связанные с текущим потоком, были уничтожены. Это уведомление должно быть таким, как если бы:
lk.unlock(); cond.notify_all();
Synchronization: Подразумеваемый lk.unlock() вызов упорядочивается после уничтожения всех объектов с продолжительностью хранения потока, связанной с текущим потоком.
[ Note: Поставляемая блокировка будет удерживаться до тех пор, пока поток не завершится, и необходимо следить за тем, чтобы это не привело к возникновению тупиковой ситуации из-за проблем с упорядочением блокировок. После вызова notify_all_at_thread_exit рекомендуется как можно скорее выйти из потока и чтобы в этом потоке не выполнялись блокирующие или трудоемкие задачи. ] — end note
[ Note: Пользователь несет ответственность за то, чтобы ожидающие потоки не ошибочно предполагали, что поток завершился, если они испытывают ложное пробуждение. Обычно это требует, чтобы ожидаемое условие удовлетворялось при удержании блокировки lk, и чтобы эта блокировка не снималась и не запрашивалась повторно перед вызовом notify_all_at_thread_exit. ] — end note