c++ std::jthread
时间: 2024-09-13 16:19:06 浏览: 79
`std::jthread`是C++17标准库中引入的一个特性,它并不是直接存在于头文件`<thread>`中,而是作为对`std::thread`的一种增强,用于处理线程间通信(joinable threads)。`std::jthread`实际上是一个包装器,它提供了一种更友好的方式来管理和操作异步任务,特别是当需要在某个时间点等待所有并发任务完成时。
使用`std::jthread`,你可以创建一个`jthread`对象,然后像普通线程那样启动一个任务,但是它的`join()`方法会在整个工作生命周期结束后自动调用,这使得管理并发更容易。当你不再需要某个`jthread`时,可以调用它的`~jthread()`析构函数或者显式地调用`detach()`方法将其从当前作用域移除。
举个例子:
```cpp
#include <iostream>
#include <jthread/jthread.hpp>
void worker() {
for (int i = 0; i < 5; ++i) {
std::cout << "Worker thread: " << i << '\n';
jthread::sleep(1);
}
}
int main() {
jthread task(worker);
// 启动任务
task.join();
return 0;
}
```
相关问题
std::jthread
std::jthread是C++20标准引入的一个新的线程类型,它是一种可停止的线程。与std::thread相比,std::jthread不仅可以在析构时自动加入线程,还能在其生命周期内调用stop方法来请求线程停止执行。
std::jthread的声明方式与std::thread相似,可以通过构造函数创建线程对象,并指定要执行的函数或可调用对象作为参数。示例如下:
```cpp
#include <iostream>
#include <chrono>
#include <thread>
void myThreadFunction()
{
for (int i = 0; i < 5; ++i) {
std::cout << "Thread is running: " << i << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
int main()
{
std::jthread myThread(myThreadFunction); // 创建一个std::jthread对象,并指定要执行的函数
if (myThread.joinable()) {
myThread.join(); // 等待线程执行完毕
}
return 0;
}
```
在上面的例子中,通过std::jthread创建了一个新的线程对象myThread,并将myThreadFunction作为参数传递给构造函数。线程开始执行后,会依次输出"Thread is running: 0"到"Thread is running: 4"。在main函数中,我们使用join方法等待线程执行完毕。
阅读全文