![](/img/trans.png)
[英]Does standard C++11 guarantee that std::async(std::launch::async, func) launches func in separate thread?
[英]When should I need to use std::async(std::launch::async, func()) instead of func()?
我沒有得到使用std::async
和std::lauch::async
標志的原因,而不是簡單地調用傳遞給std::async
的函數。 有特價保證嗎?
根據該文件 , 有可能只是需要的功能和它的參數的重載。 您正在使用接受更具體策略的重載。
async(f, args...)
相當於async(std::launch::async | std::launch::deferred, f, args...)
,其中兩個標志的存在將其留給實現關於函數是否簡單地從當前調用堆棧解耦(延遲執行第一個非定時等待函數;這稱為惰性求值 ),或實際上是多線程的。
通過僅提供 std::launch::async
, 您正在使用的調用確保該函數在其自己的線程中明確執行,從而避免阻塞調用線程的任何工作。
當然,兩種變體仍然完全不同於直接簡單地調用f(args...)
,這保證了立即評估。
是的,調用線程不會阻塞,因為std :: async生成一個單獨的線程來調用該函數。 這意味着如果您單擊GUI按鈕以開始處理復雜任務,這將需要幾分鍾,然后GUI響應,盡管處理尚未完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.