C++ 线程库与多线程编程核心机制解析
背景与动机
在 Linux 平台下,我们通常使用 POSIX 标准的 pthread 库来管理线程,接口如 pthread_create 和 pthread_join。然而,Windows 系统有自己的线程 API,这导致原生代码难以跨平台。C++11 标准引入了 <thread> 头文件,提供了一套不依赖特定操作系统的标准线程库,解决了这一痛点。
C++ 线程库的设计遵循面向对象思想,将线程抽象为 std::thread 类。它封装了底层实现细节,无论是 Linux 的 pthread 还是 Windows 的 CreateThread,对外都提供统一的接口。这种跨平台能力是通过条件编译实现的:编译器会根据当前平台宏(如 _WIN32 或 __linux__)选择对应的底层实现,对用户透明。
std::thread 类详解
构造与执行上下文
创建线程只需实例化 std::thread 对象。与传统 pthread 只能传递函数指针不同,C++ 线程构造函数支持任意可调用对象(Callable Object),包括函数指针、仿函数、Lambda 表达式以及 std::function 包装器。
#include <iostream>
#include <thread>
void print(size_t i, size_t j) {
for (; i < j; ++i) {
std::cout << "I am a thread" << std::endl;
}
}
int main() {
// 直接传递函数名及参数
std::thread t1(print, 0, 2);
t1.join();
return 0;
}
利用 Lambda 表达式可以更方便地捕获外部变量,无需打包结构体:
#include <iostream>
#include <thread>
int {
i = , j = ;
;
t();
;
}


