c 多執行緒程式設計

2021-10-11 10:17:04 字數 1062 閱讀 3933

c++11新標準中引入了四個標頭檔案來支援多執行緒程式設計,他們分別是,,,和

std::mutex, 最基本的mutex類

std::recursive_mutex,遞迴mutex類

std::time_mutex,定時mutex類

std::recursive_timed_mutex,定時遞迴mutex類

std::lock_guard,與mutex raii相關,方便執行緒對互斥量上鎖

std::unique_lock,與mutex raii相關,方便執行緒對互斥量上鎖,但提供了更好的上鎖和解鎖控制。

std::try_lock,嘗試同時對多個互斥量上鎖

std::lock,可以同時對多個互斥量上鎖

std::call_once,如果多個執行緒需要同時呼叫某個函式,call_once可以保證多個執行緒對給函式只呼叫一次。

如果第一次執行了lock()這個方法,而沒有執行unlock()這個方法,第二次再執行lock()這個方法時,程式就會卡停在這裡。而std::lock_guard()就是用來替代lock和unlock。一般可以將需要保護的**用乙個大括號括起來,然後在大括號括起來的第一行**定義std::lock_guard()。當進入這個作用域時,構造std::lock_guard()物件,在std::lock_guard()的建構函式中其實是執行了lock()這個方法,當退出這個作用域的時候,std::lock_guard()物件將會被析構,而在std::lock_guard()的析構函式中實際是呼叫了unlock()。

用於多執行緒之間的通訊,它可以阻塞乙個或同時阻塞多個執行緒。std::condition_variable需要與std::unique_lock配合使用。

當std::condition_variable物件的某個wait函式被呼叫的時候,他使用std::unique_lock來鎖住當前執行緒。當前執行緒會一直被阻塞,當另外乙個執行緒在相同的

std::condition_variable物件上呼叫了notification函式來喚醒當前執行緒

notify_one:喚醒某個wait執行緒,如果當前沒有等待執行緒,則該函式什麼也不做;如果同時存在多個等待執行緒,則喚醒某個執行緒是不確定的

C 多執行緒程式設計

一 thread 基礎 程序 當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。執行緒 執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式 方...

C 多執行緒程式設計

乙個程序通常定義為程式的乙個例項。在win32中,程序佔據4gb的位址空間。與它們在ms dos和16位windows作業系統中不同,win32程序是沒有活力的。這就是說,乙個win32程序並不執行什麼指令,它只是佔據著4gb的位址空間,此空間中有應用程式exe檔案的 和資料。exe需要的任意dll...

C 多執行緒程式設計

建立執行緒的函式 handle createthread lpsecurity attributes lpthreadattributes,使用預設安全形態,設為null,表明不可被子執行緒繼承 size t dwstacksize,初始棧大小,預設值0表示使用與呼叫該函式的執行緒相同的棧大小 lp...