C++ 线程库与多线程编程
在 Linux 平台下,我们通常使用 POSIX 标准的 pthread 库来管理线程。然而,pthread 主要适用于类 Unix 系统,在 Windows 上则需要不同的接口。C++11 标准引入了跨平台的线程库,使得同一份代码可以在不同操作系统上编译运行,无需针对平台分别实现。
thread 类基础
C++ 将线程抽象为 std::thread 对象。它封装了线程的关键属性,提供了创建、等待(join)和分离(detach)等操作。
跨平台实现原理
std::thread 在不同平台下有不同的底层实现。Linux 下封装 pthread,Windows 下封装 Windows API。这种机制通过条件编译实现:
#ifdef _WIN32
#include <windows.h>
#elif defined(__linux__) || defined(__unix__)
#include <pthread.h>
#endif
编译器会根据当前环境定义相应的宏,从而选择保留对应的实现代码。用户只需调用统一的接口,如 join() 或 detach(),底层会自动处理平台差异。
可调用对象与构造函数
std::thread 的构造函数支持多种可调用对象作为线程入口,包括函数指针、仿函数、Lambda 表达式等。这比传统的 pthread_create 更加灵活,不再局限于全局函数。
#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);
t();
;
}


