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 多執行緒支援庫,內容豐富 功能強大。首先從我個人理解角度粗鄙的理解一下多執行緒。多執行緒眾所周知 切割時間片的多程式併發執行,大多數的計算機都支援多執行緒併發的硬體支援。這可能是最簡單的多執行緒程式了。多...