文章目录
线程
线程使得程序能在数个处理器核心同时执行。
thread 类
定义用于查看和管理应用程序中执行线程的对象。
要求
头文件: <thread>
命名空间: std
公共方法
名称 | 描述 |
---|---|
detach | 容许线程从线程句柄独立开来执行 |
get_id | 返回线程的 id |
hardware_concurrency[静态] | 返回实现支持的并发线程数 |
join | 等待线程完成其执行 |
joinable | 检查线程是否可合并,即潜在地运行于平行环境中 |
native_handle | 返回底层实现定义的线程句柄 |
swap | 交换二个 thread 对象 |
join
阻塞当前线程,直至 *this 所标识的线程完成其执行。
*this 所标识的线程的完成同步于从 join() 的成功返回。
#include <iostream>
#include <thread>
#include <chrono>
void foo()
{
// 模拟昂贵操作
std::this_thread::sleep_for(1s);
}
void bar()
{
// 模拟昂贵操作
std::this_thread::sleep_for(1s);
}
int main()
{
std::cout << "启动第一个辅助线程...\n";
std::thread helper1(foo);
std::cout << "启动第二个辅助线程...\n";
std::thread helper2(bar);
std::cout << "正在等待辅助线程完成..." << std::endl;
helper1.join();
helper2.join();
std::cout << "完成!\n";
}
Output |
---|
启动第一个辅助线程… 启动第二个辅助线程… 正在等待辅助线程完成… 完成! |
detach
从 thread 对象分离执行的线程,允许执行独立地持续。一旦线程退出,则释放所有分配的资源。
调用 detach 后, *this 不再占有任何线程。
#include <iostream>
#include <chrono>
#include <thread>
void independentThread()
{
std::cout << "正在启动并发线程。\n";
std::this_thread::sleep_for(2s);
std::cout << "正在退出并发线程。\n";
}
void threadCaller()
{
std::cout << "正在启动线程调用者。\n";
std::thread t(independentThread