class thread是對線程的抽象。以下分別介紹thread是如何表示線程的大部分特征的。
執行體
線程的執行體由一個可執行(callable)對象來表示。這個執行體可以在thread創建的時候指定。thread創建完成后線程即啟動執行。
template<class Fn,class ...Args>
explicit thread(Fn &&fn,Args&&... args);
如果在創建thread的時候不指定,則該thread就沒有執行體,也就不會有線程被啟動。
thread()noexcept;
thread也可以移動構造,從另一個已存在的thread獲得執行體,同時還接收線程狀態。相當於實際的線程換了個宿主。
thread(thread &&)noexcept;
thread不能賦值和拷貝。
thread(const thread &)=delete;
分離屬性
thread在創建的時候不具備分離屬性。成員函數detach可設置thread為分離的。
join
join用於阻塞當前線程等待thread執行完執行體。一般用於多線程之間進行同步。對於不具備分離屬性的線程必須要join,否則會導致terminal。
joinable屬性
成員函數joinable用於檢測thread是否需要join。joinable為false的情況有3種:1.thread調用過detach; 2.thread已經join過; 3.thread為空。
線程句柄
成員函數get_id用於返回線程的句柄。get_id可能返回joinable為true的thread的id,joinable為false則返回 id().
以上就是標准庫thread的所有操作,所以thread不具備指定優先級的功能。
thread的輔助函數
thread的所有輔助函數位於std::this_thread命名空間中。
thread::id get_id()用於獲取當前線程id.
void yield()noexcept 用於退出本次執行,等待下次調度.
sleep_for(duration) 用於使當前線程阻塞一個時間段
sleep_until(time_point) 用於使當前線程阻塞直到某個時間點