C++多執行緒與臨界資源例項
阿新 • • 發佈:2019-02-07
在C++中引入thread標頭檔案可以很容易地實現多執行緒。
#include <thread>
引入標頭檔案後,我們需要將每一個執行緒寫成函式的形式。如示例中的inc()與dec()函式。
void inc()
{
int time = TIME;
while(time--)
{
num++;
}
}
void dec()
{
int time = TIME;
while(time--)
{
num--;
}
}
之後我們通過執行緒類的初始化就可以很容易地建立並執行執行緒。
std::thread t1(inc);
std::thread t2(dec);
注意:在主執行緒中,我們需要用thread.join() 來阻塞等待結束每一個執行緒。否則主執行緒提前結束程式會出錯。
下面是這個示例中完整的程式碼,程式碼中模擬了執行緒對臨界資源的操作。不同的執行,num的值可能會不一樣。這在我們的實際的程式設計中要注意。
#include <thread>
#include <iostream>
#define TIME 1000000
int num = 0;
void inc()
{
int time = TIME;
while (time--)
{
num++;
}
}
void dec()
{
int time = TIME;
while(time--)
{
num--;
}
}
int main()
{
std::thread t1(inc);
std::thread t2(dec);
std::cout << "thread begin" << std::endl;
t1.join();
t2.join();
std::cout << "The num is : " << num << std::endl;
return 0;
}
如有遺漏,歡迎留言補充。轉載請註明出處