1. 程式人生 > >C++多執行緒與臨界資源例項

C++多執行緒與臨界資源例項

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

如有遺漏,歡迎留言補充。轉載請註明出處