std::thread:加入与分离
使用 std::thread 创建线程,并在加入和分离之间进行选择
std::thread:加入与分离 是 CoddyKit 上的免费 C++ Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C++ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C++ Academy 课程共包含 4 节课。
std::thread 类
<thread> 头文件在 C++11 中将线程功能引入标准库。每个 std::thread 实例代表一个 OS 线程。
创建线程
请将可调用对象(函数、lambda、函数对象)传递给构造函数。线程会立即开始运行。
#include <thread>
#include <iostream>
void worker() { std::cout << "running on thread\n"; }
int main() {
std::thread t(worker);
t.join(); // wait for it to finish
}传递参数
请通过构造函数将参数转发给可调用对象。
std::thread t([](int n) { std::cout << n; }, 42);
t.join();按引用传递
请使用 std::ref 按引用传递参数。没有它时,线程接收的是副本。
int counter = 0;
std::thread t([](int& c) { ++c; }, std::ref(counter));
t.join();
std::cout << counter; // 1join():等待完成
请调用 join(),阻塞调用线程,直到目标线程完成。join 之后,该线程就不再可连接。
detach():独立运行
请调用 detach(),使线程独立运行。即使 std::thread 被销毁,线程仍会继续运行。线程退出时,资源会由 OS 释放。
std::thread t([]() { /* background work */ });
t.detach(); // we no longer track itjoinable()
请检查线程是否可以连接或分离。已经连接或分离的线程不再可连接。
忘记连接:终止
如果 std::thread 在仍可连接时被销毁,程序会调用 std::terminate。请务必在销毁前连接或分离线程。
RAII 包装器
请编写一个小型 RAII 包装器,在析构函数中连接线程。或者使用 std::jthread(C++20),它会自动连接。
#include <thread>
// C++20
std::jthread t([] { /* work */ });
// t joins automatically when destroyed硬件并发数
请使用 std::thread::hardware_concurrency() 查询硬件线程数,并用它来确定线程池的大小。
线程 ID
每个线程都有唯一的 ID。请使用 std::this_thread::get_id() 获取当前线程的 ID。
让线程休眠
请使用 std::this_thread::sleep_for(duration) 暂停当前线程。
#include <chrono>
using namespace std::chrono_literals;
std::this_thread::sleep_for(500ms);快速检查
如果可连接的 std::thread 在线程调用 join() 或 detach() 之前被销毁,会发生什么?
回顾
请使用 std::thread 和可调用对象创建线程。在线程对象销毁前,务必调用 join() 或 detach()——或者使用会自动连接的 std::jthread(C++20)。
常见问题解答
「std::thread:加入与分离」课时是免费的吗?
是的 — 「std::thread:加入与分离」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C++ Academy 课程的其余内容,请升级到 CoddyKit PRO。 C++ Academy 课程共包含 4 节课。
「std::thread:加入与分离」这节课中我会学到什么?
使用 std::thread 创建线程,并在加入和分离之间进行选择 你通过在浏览器中直接运行的动手代码来练习 C++ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C++ Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C++ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「std::thread:加入与分离」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C++ Academy 课中编写并运行代码吗?
能。每节 C++ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。