c 11 執行緒支援庫 執行緒

2021-08-25 08:39:43 字數 1631 閱讀 5996

c++支援庫

c++包含執行緒、互斥、條件變數和**的內建支援。

class thread:

thread表示單個執行執行緒。執行緒允許多個函式併發執行。

緊接著關聯的執行緒物件構造,執行緒開始執行(為任何 os 排程延遲懸掛),始於作為構造函式引數提供的頂層函式。忽略頂層函式的返回值,而且若它以拋異常終止,則呼叫 std::terminate 。頂層函式可以通過 std::promise 或修改共享變數(這可能要求同步,見 std::mutex 與 std::atomic )交流其返回值或異常到呼叫方。

std::thread物件亦可在不表示任何執行緒的狀態(預設構造、被移動、 detach 或 join 後),而執行執行緒可以不關聯到任何thread物件( detach 後)。

沒有兩個std::thread物件會表示同一執行執行緒;std::thread不可複製構造 (copyconstructible) 或可複製賦值(copyassignable) ,儘管它可移動構造 (moveconstructible) 且可移動賦值 (moveassignable) 。

std::this_thread::yield()   //建議實現再次排程執行緒的執行 

#include #include #include // 建議其他執行緒執行一小段時間的「忙睡眠」

void little_sleep(std::chrono::microseconds us)

while (std::chrono::high_resolution_clock::now() < end);

}int main()

std::thread::id get_id() noexcept;  //返回當前執行緒id

#include #include #include #include std::mutex g_display_mutex;

void foo()

int main()

//thread 11376 sleeping...

//thread 11936 sleeping...

template< class rep, class period >

void sleep_for( const std::chrono::duration

& sleep_duration );

阻塞當前執行緒執行,至少經過指定的sleep_duration

此函式可能阻塞長於sleep_duration,因為排程或資源爭議延遲。

標準庫建議用穩定時鐘度量時長。若實現用系統時間代替,則等待時間亦可能對始終調節敏感。

sleep_duration

要睡眠的時長

(無)任何時鐘、 time_point 或 duration 在執行間丟擲的異常(標準庫提供的時鐘、時間點和時長決不丟擲)。

#include #include #include int main()

//可能輸出

//hello waiter

//waited 2000.11 ms

c 11 執行緒支援庫 通用互斥管理

template class mutex class lock guard 類lock guard是互斥封裝器,為在作用域塊期間占有互斥提供便利 raii 風格機制。建立lock guard物件時,它試圖接收給定互斥的所有權。控制離開建立lock guard物件的作用域時,銷毀lock guard並...

c 11多執行緒庫

建立執行緒的四種方法 執行緒類的建構函式是變參建構函式,第乙個引數是執行緒函式,後面的引數為執行緒函式的引數 引數通過值傳遞方式,若要引用傳遞須加std ref thread t1 counter,1,6 void counter int,int class counter 實現 operator ...

c 11的多執行緒支援一(執行緒啟動)

支援多執行緒程式設計,是c 11的乙個新特性。在語言層面編寫多執行緒程式,程式的可移植性得到很大提高。新的執行緒庫通過std thread管理執行緒的執行,啟動執行緒的方式有兩種 1 以乙個函式位址為引數,例項化乙個std thread物件 2 通過乙個類的例項構造乙個std thread物件,用於...