在 Linux 下用 C++ 写多线程程序,常见做法有三种:POSIX 线程(pthread)、C++11 标准线程(std::thread)、以及更高层的线程池 / 并发库。下面从环境配置 → 编译 → 示例 → 常见坑逐步说明。
std::thread查看版本:
g++ --version
#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;
}
g++ -std=c++11 -pthread main.cpp -o main
✅ -pthread 必须加(链接 pthread 库)
运行:
./main
适合:
#include <pthread.h>
#include <iostream>
void* run(void* arg) {
int id = *(int*)arg;
std::cout << "pthread " << id << "\n";
return nullptr;
}
int main() {
pthread_t t1, t2;
int a = 1, b = 2;
pthread_create(&t1, nullptr, run, &a);
pthread_create(&t2, nullptr, run, &b);
pthread_join(t1, nullptr);
pthread_join(t2, nullptr);
}
g++ main.cpp -o main -pthread
C++ 标准库 没有线程池,常见做法:
boost::asioIntel TBBstd::async + future简单线程池示例(示意):
std::vector<std::thread> pool;
for (int i = 0; i < 4; ++i)
pool.emplace_back(worker, i);
for (auto& t : pool) t.join();
cmake_minimum_required(VERSION 3.10)
project(demo)
set(CMAKE_CXX_STANDARD 11)
add_executable(demo main.cpp)
find_package(Threads REQUIRED)
target_link_libraries(demo Threads::Threads)
编译:
mkdir build && cd build
cmake ..
make
❌ 忘记加 -pthread
❌ 线程未 join() 导致程序提前结束
❌ 多个线程同时 cout(建议加 mutex)
✅ 使用 std::lock_guard<std::mutex>
std::threadmutex / lock_guardcondition_variableasync / future如果你愿意,我可以:
你想继续哪一块?