Является ли joinable () тогда join () поточно-ориентированным в std :: thread - PullRequest
1 голос
/ 21 февраля 2020

В std::thread исключением является throw, если я вызываю join() и поток не присоединяемый.

Итак, я делаю:

if (thread.joinable())
  thread.join();

Теперь представьте, что поток завершается после joinable() и до join() (из-за планирования потоков).

Возможен ли этот случай в ситуации целесообразности? Мне действительно нужно использовать try / catch вокруг join()?

1 Ответ

4 голосов
/ 21 февраля 2020

Теперь представьте, что поток завершается после joinable () и перед join () (из-за планирования потока).

Если поток только что завершился, он не становится неприсоединяемым , std::thread::join() просто успешно сразу же вернется в том случае, как указано в документации для std::thread::joinable():

Поток, который завершил выполнение кода, но еще не был join по-прежнему считается активным потоком выполнения и, следовательно, является присоединяемым.

Может стать неприсоединяемым, если вы одновременно вызовете std::sthread::join() для того же потока.

Is этот случай возможен в достойной ситуации? Мне действительно нужно использовать метод try / catch для join ()?

Только если вы пытаетесь вызвать std::thread::join() для одного и того же потока из нескольких потоков. Вам лучше избегать этого, и только один поток управляет другими.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...