在 Linux 下用 C++ 配置/使用线程,通常有三种主流方式。下面按从常见到进阶给你讲,并附示例。
std::thread)不需要额外库,跨平台,Linux 原生支持
g++ main.cpp -std=c++11 -pthread -o main
⚠️
-pthread一定要加(Linux 下必须)
#include <iostream>
#include <thread>
void worker(int id) {
std::cout << "线程 " << id << " 运行中\n";
}
int main() {
std::thread t1(worker, 1);
std::thread t2(worker, 2);
t1.join();
t2.join();
return 0;
}
std::thread 本身不能直接设置栈大小 / 优先级,需要配合系统 API:
#include <thread>
#include <pthread.h>
int main() {
std::thread t([]{
// 线程逻辑
});
// 获取底层 pthread
pthread_t native = t.native_handle();
// 可调用 pthread_attr_*
}
更接近系统层,可控性强
g++ main.cpp -pthread
#include <pthread.h>
#include <iostream>
void* thread_func(void* arg) {
int id = *(int*)arg;
std::cout << "pthread " << id << "\n";
return nullptr;
}
int main() {
pthread_t tid;
int id = 1;
pthread_create(&tid, nullptr, thread_func, &id);
pthread_join(tid, nullptr);
}
pthread_attr_t attr;
pthread_attr_init(&attr);
// 设置栈大小
pthread_attr_setstacksize(&attr, 1024 * 1024); // 1MB
// 设置分离状态
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
pthread_create(&tid, &attr, thread_func, nullptr);
pthread_attr_destroy(&attr);
不要自己频繁创建线程
std::asyncstd::futureThreadPool(单头文件)boost::asiolibevent#include <future>
#include <iostream>
int compute() {
return 42;
}
int main() {
auto f = std::async(std::launch::async, compute);
std::cout << f.get() << "\n";
}
一般经验:
CPU 核心线程数 = std::thread::hardware_concurrency()
unsigned n = std::thread::hardware_concurrency();
❌ 忘记 -pthread
❌ 线程函数传引用出错
❌ 忘记 join() 导致崩溃
❌ 共享变量未加锁
如果你愿意,可以告诉我:
我可以直接给你最优线程架构方案。