定義於 <pthread.h>,編譯需連結 -lpthread
| 函數 | 用途 |
|---|---|
pthread_create | 建立執行緒 |
pthread_join | 等待執行緒結束 |
pthread_detach | 分離執行緒(自動回收資源) |
pthread_exit | 終止呼叫執行緒 |
pthread_cancel | 請求取消執行緒 |
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_mutex_lock(&mutex);
// 臨界區
pthread_mutex_unlock(&mutex);
PTHREAD_MUTEX_DEFAULTPTHREAD_MUTEX_RECURSIVE(同一執行緒可重複鎖定)PTHREAD_MUTEX_ERRORCHECKpthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
// 等待方
pthread_mutex_lock(&mutex);
while (!condition) pthread_cond_wait(&cond, &mutex);
// 條件滿足
pthread_mutex_unlock(&mutex);
// 通知方
pthread_mutex_lock(&mutex);
condition = true;
pthread_cond_signal(&cond); // 或 broadcast
pthread_mutex_unlock(&mutex);
多讀單寫場景優化:pthread_rwlock_t
避免頻繁建立/銷毀開銷,預先建立固定數量工作執行緒,任務佇列分發。推薦使用 Boost.ThreadPool 或 C++17 std::execution::par / 專用庫。
pthread_join 導致資源洩漏while 而非 if 檢查條件<thread>, <mutex>, <condition_variable>、<future>perf, helgrind, TSan