Теперь представьте, что поток завершается после joinable () и перед join () (из-за планирования потока).
Если поток только что завершился, он не становится неприсоединяемым , std::thread::join()
просто успешно сразу же вернется в том случае, как указано в документации для std::thread::joinable()
:
Поток, который завершил выполнение кода, но еще не был join по-прежнему считается активным потоком выполнения и, следовательно, является присоединяемым.
Может стать неприсоединяемым, если вы одновременно вызовете std::sthread::join()
для того же потока.
Is этот случай возможен в достойной ситуации? Мне действительно нужно использовать метод try / catch для join ()?
Только если вы пытаетесь вызвать std::thread::join()
для одного и того же потока из нескольких потоков. Вам лучше избегать этого, и только один поток управляет другими.