在 Linux 下用 C++ 写多线程,常见做法有三种,从“标准、推荐”到“底层”依次是:
std::thread)最简单、可移植、现代 C++ 首选
#include <iostream>
#include <thread>
void worker(int id) {
std::cout << "Thread " << id << " running\n";
}
int main() {
std::thread t1(worker, 1);
std::thread t2(worker, 2);
t1.join();
t2.join();
return 0;
}
-pthread)g++ main.cpp -std=c++11 -pthread -o test
多线程一定要防止数据竞争
std::mutex#include <mutex>
std::mutex mtx;
void safe_print(int id) {
mtx.lock();
std::cout << "Thread " << id << "\n";
mtx.unlock();
}
✅ 更推荐:
std::lock_guard<std::mutex> lock(mtx);
标准库没有线程池,需要自己写或库
简单思路:
如果你需要,我可以给你一个完整线程池示例
pthread#include <pthread.h>
void* worker(void*) {
return nullptr;
}
pthread_t t;
pthread_create(&t, nullptr, worker, nullptr);
pthread_join(t, nullptr);
❌ 缺点:
std::thread 安全❗ 忘记 join() → 程序崩溃
❗ 共享变量不加锁
❗ 死锁(多个 mutex 顺序不一致)
❗ 在多线程中用 std::cout 不保护
我可以直接给你可运行代码模板。