C ++ 11 bezpiecznie dołącz do wątku bez użycia bloku try / catch

Zgodnie z dokumentacjątutaj itutaj, metoda łączenia wątku C ++ 11 rzuci astd::system_error Jeślijoinable() == false. Zatem naturalnym sposobem oczekiwania na zakończenie wątku w celu wykonania jest coś w rodzaju:

if (thread2.joinable()) thread2.join();

Jednak ma to możliwość rzucenia std :: system_error. Rozważ wywołanie wątku 1 thread2.joinable (), zwraca true, wskazując, że thread2 nadal działa. Następnie harmonogram wstrzymuje wątek 1 i przełącza konteksty na wątek 2. Wątek 2 kończy się, a następnie wątek 1 zostaje wznowiony. Wątek 1 wywołuje thread2.join (), ale thread2 już się zakończył, w wyniku czego generowany jest std :: system_error.

Możliwym rozwiązaniem jest owinięcie całości w blok próbny:

try {
    thread2.join();
catch (std::system_error &e) {}

Ale wtedy, gdy zostanie rzucony uzasadniony std :: system_error, być może w celu wskazania, że ​​wąteknie udało się dołączyć, program jest kontynuowany, działając tak, jakby wszystko było w porządku i eleganckie. Czy istnieje odpowiedni sposób na dołączenie wątku oprócz używania takiego bloku try / catch?

questionAnswers(1)

yourAnswerToTheQuestion