
cpp thread 创建
Admin·5/30/2025·0 views
C++
这段 C++ 代码演示了如何使用 std::thread 创建并管理线程。以下是逐行解释:
代码分析
std::thread t([](){ // 1. 创建一个新线程
std::cout << "Hello from thread!" << std::endl; // 2. 线程执行的代码
}); // 3. 线程开始执行
t.join(); // 4. 等待线程结束
详细说明
- 创建线程对象
std::thread t(...):
- 声明一个名为
t的线程对象。 - 构造函数参数是一个 lambda 表达式
[](){ ... },它定义了线程要执行的任务。 - 当对象
t被创建时,线程立即开始执行。 - 线程任务(Lambda 表达式)
cpp [](){ std::cout << "Hello from thread!" << std::endl; }
[]:空捕获列表(不捕获外部变量)。():无参数。- 函数体:向标准输出打印
"Hello from thread!"并换行(std::endl会刷新缓冲区)。 - 线程启动
线程在t对象构造完成后立即开始执行 lambda 中的代码,与主线程并发运行。
- 等待线程结束(
.join())
t.join():
- 阻塞主线程,直到线程
t完成其任务。 - 确保线程安全退出,避免资源泄漏(必须调用
join()或detach())。
执行流程
sequenceDiagram
participant 主线程
participant 子线程
主线程->>子线程: 创建线程 t (lambda 开始执行)
子线程->>控制台: 打印 "Hello from thread!"
主线程->>子线程: t.join() 等待
子线程-->>主线程: 执行完毕
主线程->>主线程: 继续执行后续代码
控制台子线程主线程控制台子线程主线程创建线程 t (lambda 开始执行)打印 "Hello from thread!"t.join() 等待执行完毕继续执行后续代码
关键点
- 并发性:子线程与主线程同时运行(打印操作可能发生在
t.join()之前/期间)。 - 资源管理:必须调用
join()(等待线程结束)或detach()(分离线程),否则程序终止时std::terminate会被调用。 - 输出顺序不确定性:若主线程有其他输出,由于线程调度,打印顺序可能不同(此例中主线程无其他操作)。
等价函数写法
若用普通函数替代 lambda:
void threadFunc() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
std::thread t(threadFunc); // 传递函数指针
t.join();
}
常见错误
- 忘记 join/detach:导致程序崩溃。
- 访问共享数据不同步:此例无共享数据,安全。
总结:这段代码创建了一个打印消息的线程,并确保主线程等待其完成后再退出,是多线程编程的基础操作。