在 Linux 下用 C++ 创建线程,常见有三种方式:
std::thread(推荐,跨平台)clone(很少直接用)下面重点讲 pthread 和 C++11 thread,并给出完整示例。
#include <pthread.h>
#include <iostream>
void* thread_func(void* arg)
{
int* val = (int*)arg;
std::cout << "Thread running, arg = " << *val << std::endl;
return nullptr;
}
int main()
{
pthread_t tid;
int value = 10;
pthread_create(&tid, nullptr, thread_func, &value);
pthread_join(tid, nullptr); // 等待线程结束
std::cout << "Main thread exit" << std::endl;
return 0;
}
g++ thread_pthread.cpp -o thread_pthread -lpthread
✅ 特点
std::thread(✅ 强烈推荐)#include <thread>
#include <iostream>
void thread_func(int x)
{
std::cout << "Thread running, x = " << x << std::endl;
}
int main()
{
std::thread t(thread_func, 10);
t.join(); // 等待线程结束
std::cout << "Main thread exit" << std::endl;
return 0;
}
g++ -std=c++11 thread_std.cpp -o thread_std
✅ 优点
pthread_create(&tid, nullptr, func, (void*)arg);
std::thread t(func, arg1, arg2);
❌ 忘记 join / detach
std::thread t(func);
// 程序会直接 terminate
✅ 正确做法:
t.join();
// 或
t.detach();
| 场景 | 推荐 |
|---|---|
| 新项目 / 跨平台 | ✅ std::thread |
| Linux 底层 / 高性能 | pthread |
| 学习操作系统原理 | pthread |
如果你愿意,我可以继续讲:
你想深入哪一块?