std::jthread
出自 cppreference.com
| 定義於標頭檔 <thread> |
||
| class jthread; |
(自 C++20 起) | |
jthread 類別代表單一執行緒。除了 jthread 在解構時會自動執行 join,且在特定情況下可被取消或停止之外,其餘行為與 std::thread 大致相同。
執行緒在關聯的執行緒物件建構後立即開始執行(需等待作業系統排程延遲),並從作為建構函式參數提供的頂層函式開始。頂層函式的回傳值會被忽略,若其因拋出例外而終止,則會呼叫 std::terminate。頂層函式可透過 std::promise 或修改共享變數(可能需要同步,請參閱 std::mutex 與 std::atomic)將其回傳值或例外傳達給呼叫者。
與 std::thread 不同,jthread 邏輯上持有一個型別為 std::stop_source 的內部私有成員,用以維護共享的停止狀態。jthread 建構函式接受一個函式,該函式以 std::stop_token 作為其第一個參數,此參數由 jthread 從其內部的 std::stop_source 傳入。這允許該函式在執行期間檢查是否已請求停止,並在確認時回傳。
std::jthread 物件也可能處於不代表任何執行緒的狀態(在預設建構、被移動後、執行 detach 或 join 之後),且執行緒可能未與任何 jthread 物件關聯(在 detach 之後)。
沒有兩個 std::jthread 物件可以代表同一個執行緒;std::jthread 不是 可複製建構 (CopyConstructible) 或 可複製賦值 (CopyAssignable) 的,但它是 可移動建構 (MoveConstructible) 與 可移動賦值 (MoveAssignable) 的。
目錄 |
[編輯] 成員型別
| 成員型別 | 定義 |
id
|
std::thread::id |
native_handle_type (可選*) |
std::thread::native_handle_type |
[編輯] 成員函式
建構新的 jthread 物件(公開成員函式) | |
| 若執行緒可 join,則請求停止並執行 join (公開成員函式) | |
移動 jthread 物件(公開成員函式) | |
觀察器 | |
| 檢查執行緒是否可 join,即是否可能在並行環境中執行 (公開成員函式) | |
| 回傳執行緒的 id (公開成員函式) | |
| 回傳底層由實作定義的執行緒控制代碼 (handle) (公開成員函式) | |
| 回傳實作支援的併發執行緒數量 (公開靜態成員函式) | |
作業 (Operations) | |
| 等待執行緒完成其執行 (公開成員函式) | |
| 允許執行緒脫離執行緒控制代碼獨立執行 (公開成員函式) | |
| 交換兩個 jthread 物件 (公開成員函式) | |
停止符記 (Stop token) 處理 | |
回傳與執行緒的共享停止狀態相關聯的 stop_source 物件(公開成員函式) | |
回傳與執行緒的共享停止狀態相關聯的 stop_token(公開成員函式) | |
| 透過執行緒的共享停止狀態請求停止執行 (公開成員函式) | |
[編輯] 非成員函式
| (C++20) |
特化 std::swap 演算法 (函式) |
[編輯] 附註
| 功能測試巨集 | 數值 | 標準 | 功能 |
|---|---|---|---|
__cpp_lib_jthread |
201911L |
(C++20) | 停止符記 (Stop token) 與 joining 執行緒 |
[編輯] 參閱
| (C++11) |
管理一個獨立的執行緒 (類別) |