標頭檔案:#include建立執行緒
void show(int x)
void print(string str,int i)
t1.join();
return 0;
}只要不將f洩露,就不會引起資源競爭。
死鎖,與解決死鎖的辦法
先寫乙個出現死鎖的小例子
#include #include #include #include #include using namespace std;
mutex mu;
class logfile
void print(string str,int i)
t1.join();
return 0;
}以上出現死鎖的原因是因為print將mutex1鎖住而print2需要mutex1,print2需要mutex2而此時mutex2被print鎖住。
解決辦法
void print(string str,int i));
//以上**保證檔案只被開啟一次。
多執行緒的條件變數
以下**為模擬生產者消費者模式,使用條件變數使消費者程序在等待生長過程中的多次迴圈,用條件變數在無產品時,自動休眠。
#include#include #include #include #include using namespace std;
queueq;
mutex mu;
condition_variable cond;
void fun1()
}void fun2());//先解鎖休眠程序,等待喚醒,喚醒後再加鎖
//這裡cond可能被自己啟用,稱為偽啟用,第二個引數為lamda函式,佇列不為空才會被啟用
data = q.front();
q.pop();
mu.unlock();
printf("消費者:%d\n",data);
count++;
printf("消費者迴圈等待次數:%d\n",count);
}}int main()
C 多執行緒程式設計學習筆記
建立執行緒 void fun 執行緒函式 thread t1 fun t1.join join 是兩個執行緒交匯的意思,工作執行緒和主線程在此處交匯,jion 之後的主線程會阻塞直到工作執行緒執行結束。detach 使執行緒函式脫離執行緒物件,即當執行緒物件銷毀了執行緒函式依然可能執行。通常不推薦這...
C 學習 多執行緒程式設計 多執行緒基礎
c 內建了對多執行緒程式設計的支援功能,所以相對於其他語言在多執行緒方面的問題,c 這裡就已經最小化或者不復存在。在.net framework 4.0中,c 中新增了兩個與多執行緒應用程式相關的重要功能 tpl 任務執行並行庫 和plinq 並行linq 兩者都提供對並行程式設計的支援,都可以利用...
C 多執行緒學習筆記
一 基本概念 bi d.z9k l b 0 程序 當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。q7 j ka ik z b0 執行緒 執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 ...