您的位置:首页 >C++多线程编程:std::thread使用教程
发布于2026-01-20 阅读(0)
扫一扫,手机访问
在C++中使用std::thread创建多线程需包含<thread>头文件,通过创建std::thread对象传入函数、lambda或函数对象来启动线程,实现跨平台多线程编程。

在C++中使用std::thread创建多线程非常直接。从C++11开始,标准库提供了<thread>头文件,让开发者无需依赖平台相关的API(如pthread或Windows线程)就能编写跨平台的多线程程序。
要使用多线程功能,首先需要包含<thread>头文件。然后你可以创建一个std::thread对象,并传入一个可调用的目标,比如函数、lambda表达式或函数对象。
示例:启动一个简单线程
#include <iostream>
#include <thread>
void say_hello() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
std::thread t(say_hello); // 启动线程执行say_hello
t.join(); // 等待线程结束
return 0;
}
这里,t.join()的作用是阻塞主线程,直到子线程执行完毕。如果不调用join()或detach(),程序在主线程结束时会调用std::terminate(),导致异常退出。
你可以向线程函数传递参数,但需要注意:默认情况下,参数是以值拷贝方式传递的。如果需要传引用,必须使用std::ref包装。
示例:传参和引用传递
#include <iostream>
#include <thread>
void print_value(int& x) {
x = 42;
std::cout << "Inside thread: x = " << x << std::endl;
}
int main() {
int value = 10;
std::thread t(print_value, std::ref(value)); // 必须用std::ref才能传引用
t.join();
std::cout << "After thread: x = " << value << std::endl; // 输出42
return 0;
}
Lambda表达式是创建线程的常用方式,尤其适合短小的并发任务。
#include <iostream>
#include <thread>
int main() {
auto task = []() {
std::cout << "Lambda thread running!" << std::endl;
};
std::thread t(task);
t.join();
return 0;
}
也可以直接把lambda作为构造参数:
std::thread t([](){
std::cout << "Inline lambda thread!" << std::endl;
});
t.join();
如果你不希望主线程等待子线程,可以调用detach()。这样线程会在后台独立运行,生命周期不再受std::thread对象控制。
std::thread t([]{
for(int i = 0; i < 5; ++i)
std::cout << "Detached thread: " << i << std::endl;
});
t.detach(); // 分离线程
// 主线程可能很快结束,注意输出可能不完整
注意:detach()后无法再join(),且需确保被访问的数据在分离线程运行期间仍然有效。
基本上就这些。掌握std::thread的创建、参数传递、join与detach,就具备了C++多线程编程的基础能力。后续可以结合std::mutex、std::atomic等工具处理共享数据安全问题。
上一篇:360极速浏览器便携版制作教程
下一篇:红果短剧登录入口及官网地址
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9