1. C++11线程库概述
2011年发布的C++11标准首次将多线程支持纳入标准库,结束了C++开发者长期依赖平台特定API(如pthread、Windows线程API)的历史。这个改变让跨平台多线程开发变得前所未有的简单。作为从C++98直接跨越到C++11的老兵,我至今记得第一次用std::thread替换pthread_create时那种"终于等到你"的激动。
线程库的核心价值在于:
- 统一接口:一套代码兼容Windows/Linux/macOS
- 资源管理:利用RAII机制自动处理线程生命周期
- 类型安全:编译期检查替代运行时错误
- 与其它特性协同:完美配合lambda、移动语义等新特性
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心组件深度解析
2.1 std::thread 使用实践
创建线程的四种典型方式:
cpp复制// 1. 普通函数
void task() { cout << "Running in thread"; }
std::thread t1(task);
// 2. 成员函数
class Worker {
public:
void run() { /*...*/ }
};
Worker w;
std::thread t2(&Worker::run, &w);
// 3. Lambda表达式
std::thread t3([]{
cout << "Lambda thread";
});
// 4. 带参数的callable对象
struct Task {
void operator()(int param) { /*...*/ }
};
Task task_obj;
std::thread t4(task_obj, 42);
关键经验:创建即启动!与pthread不同,std::thread对象构造完成时线程已在运行。这是新手最容易踩的坑。
线程标识的重要方法:
cpp复制t1.get_id(); // 获取线程ID
std::thread::hardware_concurrency(); // 核心数
std::this_thread::sleep_for(1s); // 当前线程休眠
2.2 线程生命周期管理
线程分离与等待的抉择:
cpp复制std:
