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