C++ STL 创建线程的三种方式

版权声明:本文为博主原创文章,转载请附上原文链接。 https://blog.csdn.net/Raito__/article/details/83340410

使用 stl thread 编写多线程程序时,编译需要加 -pthread

通过函数指针创建线程

#include <iostream>
#include <thread>

using namespace std;

void func(int id, int number)
{
        for(int i=0;i<number;++i)
        {
                cout<<id<<":"<<i<<endl;
        }
}

int main()
{
    thread t1(func, 1, 50);
    thread t2(func, 2, 50);
    t1.join();
    t2.join();
}

通过函数对象创建线程

#include <iostream>
#include <thread>

using namespace std;

class Counter
{
public:
        Counter(int id, int number)
                :mId(id), mNumber(number)
        {}

        void operator()() const
        {
                for(int i=0;i<mNumber;++i)
                        {cout<<mId<<":"<<i<<endl;}
        }
private:
        int mId;
        int mNumber;
};

int main()
{
        // using uniform initialization syntax
        thread t1{Counter{1,20}};

        // using named variable
        Counter c(2,30);
        thread t2(c);

        // using temporary
        thread t3(Counter(3,10));

        t1.join();
        t2.join();
        t3.join();

        return 0;
}

通过成员函数创建对象

#include <iostream>
#include <thread>

using namespace std;

class Test
{
public:
        Test(int id, int number)
                :mId(id), mNumber(number)
        {}

        void func(string arg)
        {
                cout<<arg<<endl;
                for(int i=0;i<mNumber;++i)
                        {cout<<mId<<":"<<i<<endl;}
        }
private:
        int mId;
        int mNumber;
};

int main()
{
        Test test(1, 20);
        thread t{&Test::func, &test, "start"};
        t.join();

        return 0;
}

猜你喜欢

转载自blog.csdn.net/Raito__/article/details/83340410