std:thread
时间: 2024-03-02 15:46:30 浏览: 70
std::thread是C++标准库中的一个类,用于创建和管理线程。它提供了一种方便的方式来并发执行多个任务。
使用std::thread,您可以创建一个新的线程,并将其与一个可调用对象(如函数、函数指针、成员函数指针或lambda表达式)关联起来。一旦线程被创建,它将独立于主线程运行,并且可以执行与主线程并发的操作。
以下是std::thread的一些重要特性和用法:
1. 创建线程:
您可以使用std::thread的构造函数来创建一个新的线程。构造函数接受一个可调用对象作为参数,并可选地传递其他参数给该可调用对象。
例如,以下代码创建了一个新的线程,并将其与一个函数关联起来:
```cpp
void myFunction(int arg) {
// 线程执行的代码
}
std::thread myThread(myFunction, 42);
```
2. 加入(join)线程:
通过调用std::thread对象的join()函数,您可以等待线程的执行完成。这意味着主线程将暂停,直到关联的线程完成其工作。
例如,以下代码创建了一个新的线程,并等待其执行完成:
```cpp
void myFunction() {
// 线程执行的代码
}
std::thread myThread(myFunction);
// 等待线程执行完成
myThread.join();
```
3. 分离(detach)线程:
通过调用std::thread对象的detach()函数,您可以将线程与主线程分离。这意味着主线程和子线程可以并行执行,互不干扰。
例如,以下代码创建了一个新的线程,并将其与一个函数关联起来,然后将其分离:
```cpp
void myFunction() {
// 线程执行的代码
}
std::thread myThread(myFunction);
// 分离线程
myThread.detach();
```
4. 获取线程ID:
您可以使用std::thread对象的get_id()函数来获取线程的唯一标识符。
例如,以下代码创建了一个新的线程,并打印其ID:
```cpp
void myFunction() {
// 线程执行的代码
}
std::thread myThread(myFunction);
// 获取线程ID并打印
std::cout << "Thread ID: " << myThread.get_id() << std::endl;
```
这些是std::thread的一些基本用法和特性。它提供了一种方便的方式来实现并发编程,并允许您在程序中同时执行多个任务。
阅读全文