简介
C++ 11 之后有了标准的线程库:std::thread。本文针对thread介绍多线程的基本语法,并做案例展示。
基本语法
头文件: #include <thread>
thread 参数: thread(Fn&& fn, Args&&… args);
说白了fn就是需要执行的函数指针(函数名),args是需要传入fn的参数
thread.get_id() : 获取线程 ID
thread.join() : 此线程执行完之后才能继续执行
thread.detach() : 将当前线程对象所代表的执行实例与该线程对象分离,使得线程的执行可以单独进行。
程序案例
简单的案例
void func(int limit) {
cout << "This is func thread " << endl;
int s = 0;
for (int i = 0; i < limit; i++)
s += i;
cout << "Print sum: "<< s << endl;
}
int main() {
thread it = thread(func, 50);
cout << "Thread id is: " << it.get_id() << endl;
it.join();
}
执行结果
This is func thread
Thread id is: 6904
Print sum: 1225
进阶版的案例:利用仿函数
class A {
public:
void operator()(int limit) { //对()符号进行重载,让类型A可以直接调用()启动函数
for (int i = 0; i < limit; i++) {
cout << "In A:" << endl;
}
}
};
int main() {
thread it = thread(A(), 5);
cout << "Thread id is: " << it.get_id() << endl;
it.join();
for (int i = 0; i < 10; i++) {
cout << "In main:" << i << endl;
}
}
执行结果
In A:0Thread id is: 13716
In A:1
In A:2
In A:3
In A:4
In main:0
In main:1
In main:2
In main:3
In main:4
In main:5
In main:6
In main:7
In main:8
In main:9
总结
本篇讲了Thread类的基本语法和简单案例,接下来将讲述如何计算线程的运算时间以及实现线程的加速实现。