首頁 > 後端開發 > C++ > 為什麼 `std::async` Future 的析構函式會阻塞?

為什麼 `std::async` Future 的析構函式會阻塞?

Susan Sarandon
發布: 2024-11-26 03:22:17
原創
198 人瀏覽過

Why Does the Destructor of a `std::async` Future Block?

為什麼從 std::async 阻塞回傳 Future 的析構函式?

在 C 11 中,future 的析構函數由std::async 塊,導致潛在的死鎖。這種行為引發了關注,引發了標準化委員會內部的一系列提案和討論。

問題的癥結在於確保線程安全。如果沒有阻塞行為,可能會出現這樣的情況:關聯的執行緒在 future 被銷毀後繼續執行,而無法同步其完成。這可能會導致記憶體損壞,甚至損害系統安全性。

正如 Hans Boehm 在 N3679 中所解釋的,未處理的異常可能會繞過旨在等待完成的程式碼,從而加劇了這種情況。因此,阻塞析構函數起到了安全網的作用,防止了這種災難性的結果。

儘管進行了廣泛的審議,C 社群尚未就此事達成共識。從 C 14 開始,std::future 和 std::thread 的析構函式仍然阻塞。

但是,這種情況將來可能會改變。 Michael Wong 2013 年的旅行報告表明,雖然棄用 std::async 的動議失敗了,但人們越來越認識到其阻塞行為所帶來的潛在危險。

同時,程式設計師應該意識到這一點發出並採用適當的措施,例如範圍保護或顯式同步機制,以確保處理從 std::async 返回的 future 時的線程安全。

以上是為什麼 `std::async` Future 的析構函式會阻塞?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板