c++, std::thread用法
时间: 2023-08-25 18:17:50 浏览: 151
C++11 并发指南之std::thread 详解
在C++中,std::thread是用于创建和管理线程的类。以下是std::thread的基本用法:
1. 包含头文件:为了使用std::thread,需要包含头文件<thread>。
2. 创建线程:使用std::thread的构造函数创建线程对象,并将函数指针或可调用对象作为参数传递给构造函数。例如:
```cpp
void myFunction() {
// 线程执行的代码
}
std::thread myThread(myFunction); // 创建一个新线程,执行myFunction
```
3. 启动线程:通过调用线程对象的成员函数`std::thread::join()`来启动线程。例如:
```cpp
myThread.join(); // 启动线程执行
```
4. 传递参数:如果需要向线程传递参数,可以在创建线程时将参数作为额外的参数传递给构造函数。例如:
```cpp
void myFunction(int arg1, std::string arg2) {
// 使用传递的参数执行操作
}
std::thread myThread(myFunction, 42, "Hello"); // 创建线程并传递参数
```
5. 分离线程:通过调用线程对象的成员函数`std::thread::detach()`可以将线程分离,使其在后台运行而不需要等待。例如:
```cpp
myThread.detach(); // 分离线程,使其在后台运行
```
6. 获取线程ID:可以通过`std::thread::get_id()`成员函数获取线程的唯一标识符。例如:
```cpp
std::thread::id threadId = myThread.get_id(); // 获取线程的ID
```
7. 线程同步:在线程间进行同步操作时,可以使用互斥锁(std::mutex)和条件变量(std::condition_variable)等同步原语来确保线程安全。
注意事项:
线程的生命周期应与其所执行的函数的生命周期相匹配,以避免悬挂引用或访问已销毁的对象。
- 分离线程后,不能再对其进行join()操作,也无法获取其状态或等待其完成。
这是std::thread的基本用法,您可以根据实际需求进一步了解和使用其他相关函数和特性。
阅读全文