iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 24
0

Scott Meyers 在《Effective Modern C++》書中 Item 35 條提出,開發多緒程式,在 Thread-Based 以及 Task-Based 之間,應該偏好「後者」。本篇簡單說明 C++11 引入的 std::async 以及 std::future

雖然 std::thread 把不同平台之間的多緒程式開發定出一致的介面,但用起來還是過於「低層次」,許多概念對計算機底層原理不甚理解的,容易暈。Task-based 則採取不同切入角度,以類似「任務」的概念來定義。

底下範例程式用到了 std::async

TeaShopOwner WhoAccept1Country2Systems();

auto task_force = std::async(WhoAccept1Country2Systems);
//... Sometime in the future
auto the_owner = task_force.get();

上例中,std::async 回傳一個 std::future<TeaShopOwner> 物件,可用來對該任務進行查詢與控制。上例中呼叫了 get() 來取得執行結果。會有兩種情況:

  • 結果完成,回傳期待的值
  • 結果尚未完成,等候 get() 返回值

std::async 支援額外的參數用以指定「任務」應該以何種方式被執行—延後執行或非同步。有興趣的讀者可以進一步研究。

多緒程式不好寫,許多「現代化」程式語言針對這個議題做了不少努力,C++ 也不例外。做為一個通用型程式語言,C++11 提供了基礎組件,就看你怎麼好好利用了。


上一篇
DAY22:緩解開發多緒程式的痛楚—std::thread
下一篇
DAY24:從不同的角度「觀賞」、「操作」字串與字元陣列
系列文
山姆大叔談 C++:從歷史談起,再給個定義—Modern C++ 解惑26

尚未有邦友留言

立即登入留言