在 Linux 下用 C++ 配置/使用线程,通常有几种方式,从系统原生到现代 C++ 标准,下面按常见程度给你讲清楚。
std::thread(首选)Linux 下 必须链接 pthread:
g++ main.cpp -std=c++11 -pthread -o app
⚠️ 即使是
std::thread,底层仍然依赖 pthread
#include <iostream>
#include <thread>
void worker(int id) {
std::cout << "thread " << id << std::endl;
}
int main() {
std::thread t1(worker, 1);
std::thread t2(worker, 2);
t1.join();
t2.join();
return 0;
}
#include <thread>
unsigned int n = std::thread::hardware_concurrency();
g++ main.cpp -pthread
#include <pthread.h>
#include <iostream>
void* thread_func(void* arg) {
std::cout << "hello pthread" << std::endl;
return nullptr;
}
int main() {
pthread_t t;
pthread_create(&t, nullptr, thread_func, nullptr);
pthread_join(t, nullptr);
}
不要频繁 new thread,用线程池:
或者直接用库:
std::asyncboost::asio::thread_poolfolly::CPUThreadPoolExecutor#define _GNU_SOURCE
#include <pthread.h>
#include <sched.h>
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(0, &cpuset);
pthread_setaffinity_np(pthread_self(), sizeof(cpuset), &cpuset);
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setstacksize(&attr, 8 * 1024 * 1024); // 8MB
✅ 一定要 join() 或 detach()
✅ 多线程访问共享变量必须加锁
✅ 不要捕获局部变量引用到线程里
✅ Release 下线程问题更难查
| 场景 | 推荐 |
|---|---|
| 新项目 | std::thread |
| 老 C 项目 | pthread |
| 高并发服务 | 线程池 |
| 极致性能 | 绑核 + 无锁 |
如果你愿意,可以告诉我:
我可以直接帮你写一套可用的线程配置模板。