簡體   English   中英

在 std::thread 中 joinable() 然后 join() 是線程安全的嗎?

[英]Is joinable() then join() thread-safe in std::thread?

std::thread中,如果我調用join()並且線程不可連接,則會引發異常。

所以我這樣做:

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

現在假設線程在joinable()之后和join()之前終止(由於線程調度)。

這種情況在價值情況下可能嗎? 我真的需要在join()周圍使用try / catch嗎?

現在想象線程在 joinable() 之后和 join() 之前終止(由於線程調度)。

如果線程剛剛終止,它不會變得不可連接, std::thread::join()將在這種情況下立即成功返回,如std::thread::joinable()文檔中所述:

已完成代碼執行但尚未加入的線程仍被視為活動的執行線程,因此是可加入的。

如果您同時為同一個線程調用std::sthread::join() ,它可能變得不可連接。

這種情況在值得的情況下可能嗎? 我真的需要在 join() 周圍使用 try / catch 嗎?

僅當您嘗試從多個線程為同一線程調用std::thread::join() 你最好避免這種情況,只有一個線程管理其他線程。

它不是線程安全的。 如果您有多個線程可以隨時調用您的代碼段,您可能會遇到競爭條件。 防止這種情況的唯一真正方法是將您的代碼段包裝在調用所述代碼段的線程共享的std::mutex中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM