C 探幽 C 11多執行緒

2021-10-25 11:42:42 字數 1092 閱讀 2930

c++11中使用thread,c++98 中使用pthread,並且pthread只支援linux。

#include//建立執行緒需要的標頭檔案

#include//鎖的標頭檔案

假設有如下兩個函式:

int number = 0;//全域性變數

mutex g_lock;//鎖

int threadproc1()

return 0;

}int thread2proc2()

return 0;

}

建立執行緒的步驟為:在main函式中定義兩個執行緒,並將對應的函式放進去即可

int main()

在上述的例子中,全域性變數g_lock是互斥鎖,能夠實現資源的互斥訪問。一般包括兩個步驟:上鎖g_lock.lock(),和解鎖g_lock.unlock()。上鎖和解鎖直接加在對應的變數前後即可,但是需要注意加鎖後必須記得解鎖。面對比較大的工程,忘記解鎖或者程式異常等導致解鎖失敗是難免的,所以c++11提供了lock_guard類管理鎖。

lock_guard類在建構函式中加鎖(lock),在自己的生命週期內一直變數一直被鎖,當lock_guard析構的時候解鎖(unlock),此時完成自動解鎖,開發者不需要手動上鎖解鎖。

在上述**中,例如:

int threadproc1()

return 0;

}

上述**在函式threadproc1()執行期間,變數number就一直處於被鎖定的狀態,因為lock_guard的作用區間是自己的整個生命週期。所以這樣寫的話,兩個執行緒就沒有什麼意義了,所以如果是對某乙個變數加鎖解鎖的話,可以再迴圈內實現

int threadproc1()

return 0;

}

上述在每乙個i迴圈中都會構造和析構locker從而完成在迴圈內部對變數的加鎖和解鎖。

C 11 多執行緒

新特性之描述 雖然 c 11 會在語言的定義上提供乙個記憶體模型以支援執行緒,但執行緒的使用主要將以 c 11 標準庫的方式呈現。c 11 標準庫會提供型別 thread std thread 若要執行乙個執行緒,可以建立乙個型別 thread 的實體,其初始引數為乙個函式物件,以及該函式物件所需要...

c 11 多執行緒

1.多執行緒的原理 同一時間內,cpu只能處理1條執行緒,只有1條執行緒在工作 執行 多執行緒併發 同時 執行,其實是cpu快速地在多條執行緒之間排程 切換 如果cpu排程執行緒的時間足夠快,就造成了多執行緒併發執行的假象。思考 如果執行緒非常非常多,會發生什麼情況?cpu會在n多執行緒之間排程,c...

C 11 多執行緒

2011 年 c 迎來重大的改革 語言層面上承認了 多執行緒 程式的存在 加入了 thread 多執行緒支援庫,內容豐富 功能強大。首先從我個人理解角度粗鄙的理解一下多執行緒。多執行緒眾所周知 切割時間片的多程式併發執行,大多數的計算機都支援多執行緒併發的硬體支援。這可能是最簡單的多執行緒程式了。多...