<pthread.h>g++ -o prog prog.cpp -lpthread(靜態鏈接可加 -static)。#include
#include
using namespace std;
void* thread_func(void* arg) {
cout << "Thread running: " << (char*)arg << endl;
return nullptr;
}
int main() {
pthread_t t1, t2;
pthread_create(&t1, nullptr, thread_func, (void*)"Thread-1");
pthread_create(&t2, nullptr, thread_func, (void*)"Thread-2");
pthread_exit(nullptr); // 等待所有線程結束
return 0;
}
注意:線程啟動順序不確定,多次執行輸出順序可能不同。
必須宣告為 static,因為非靜態成員函式隱含 this 指標,簽名不匹配 void*(*)(void*)。
靜態成員函式屬於類而非物件,無 this,符合線程函式簽名。
class MyThread {
public:
static void* run(void* arg) { ... }
};
pthread_create(&tid, nullptr, MyThread::run, nullptr);
通過 void* arg 傳遞任意資料指標,線程內 static_cast 還原。生命週期管理至關重要:確保主線程不早於子線程銷毀參數物件。
bool flag = true;
void* worker(void*) { while(flag) { /* busy wait */ } }
flag = false; // 主線程通知停止
缺點:忙等待浪費 CPU,無法精確控制順序。
pthread_t t1, t2;
pthread_create(&t1, nullptr, func1, nullptr);
pthread_join(t1, nullptr); // 阻塞直到 t1 結束
pthread_create(&t2, nullptr, func2, nullptr); // t1 結束後才啟動 t2
pthread_join(t2, nullptr);
可獲取線程返回值(pthread_exit 傳遞的 void*)。
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
int shared = 0;
void* inc(void*) {
pthread_mutex_lock(&mutex);
++shared;
pthread_mutex_unlock(&mutex);
return nullptr;
}
作用:確保同一時間僅一線程訪問臨界區。不保證執行順序,僅保證互斥存取。
生產級開發建議使用 C++11 <thread>、<mutex>、<condition_variable>、<future> 等標準庫設施,跨平台、型別安全、支援 RAII 鎖管理(lock_guard、unique_lock),避免手動 pthread 的易錯誤細節。
pthread_create,靜態成員函式入口。void*,注意生命週期。pthread_join 等待結束,pthread_mutex 保護共享資料。std::thread 族群,更安全易用。