歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

Copyright © Linux教程網 All Rights Reserved