在 Ubuntu 下进行 C++ 多线程编程,常见有三种方式:
std::thread) ✅ 推荐下面重点讲 最常用、最现代的 std::thread 方式,并补充 pthread 示例。
std::thread(推荐)#include <iostream>
#include <thread>
void worker(int id) {
std::cout << "Thread " << id << " is running\n";
}
int main() {
std::thread t1(worker, 1);
std::thread t2(worker, 2);
t1.join();
t2.join();
std::cout << "Main thread done\n";
return 0;
}
-pthread)g++ main.cpp -o main -pthread
./main
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int counter = 0;
void increment() {
for (int i = 0; i < 100000; ++i) {
std::lock_guard<std::mutex> lock(mtx);
counter++;
}
}
int main() {
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout << "Counter = " << counter << std::endl;
}
#include <pthread.h>
#include <iostream>
void* worker(void* arg) {
int id = *(int*)arg;
std::cout << "Thread " << id << std::endl;
return nullptr;
}
int main() {
pthread_t t1, t2;
int a = 1, b = 2;
pthread_create(&t1, nullptr, worker, &a);
pthread_create(&t2, nullptr, worker, &b);
pthread_join(t1, nullptr);
pthread_join(t2, nullptr);
}
g++ pthread_demo.cpp -o pthread_demo -pthread
✅ 一定要 join() 或 detach()
✅ 多线程访问共享数据必须加锁
✅ Ubuntu 默认支持多线程,无需额外安装
✅ 使用 -pthread 而不是 -lpthread(更规范)
std::asyncstd::condition_variablestd::atomic如果你有具体需求(比如 网络通信 / 计算密集型 / 生产者消费者模型),可以告诉我,我可以直接给你对应示例。