在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;
}