线程创建
头文件#include thread 是在 C++11 标准中引入的。
C++11 标准引入了对多线程编程的标准化支持,其中包括了线程的创建、管理和同步机制。
#include <iostream>
#include <thread>
using namespace std;
void hello() {
cout << "Hello World from new thread." << endl;
}
int main() {
thread t(hello);
t.join();
return 0;
}
-
为了使用多线程的接口,我们需要#include
头文件。新建线程的入口是一个普通的函数,它并没有什么特别的地方。 -
创建线程的方式就是构造一个thread对象,并指定入口函数。与普通对象不一样的是,此时编译器便会为我们创建一个新的操作系统线程,并在新的线程中执行我们的入口函数。
int main() {
thread t([] {
cout << "Hello World from lambda thread." << endl;
});
t.join();
return 0;
}
- 也可以直接使用lambda表达式
join & detach
API | 说明 |
---|---|
join | 等待线程完成其执行 |
detach | 不等待,允许线程独立执行 |
-
join:调用此接口时,当前线程会一直阻塞,直到目标线程执行完成(当然,很可能目标线程在此处调用之前就已经执行完成了,不过这不要紧)。因此,如果目标线程的任务非常耗时,你就要考虑好是否需要在主线程上等待它了,因此这很可能会导致主线程卡住。
-
detach:detach是让目标线程成为守护线程(daemon threads)。一旦detach之后,目标线程将独立执行,即便其对应的thread对象销毁也不影响线程的执行。并且,你无法再与之通信。