併發函式庫對照 (Concurrency Library Comparison)
Overview Table
| 項目 | 要點 |
|---|---|
| 比較對象 | C++11 標準庫 / Boost 執行緒庫 / POSIX C / Java |
| 比較維度 | 啟動執行緒、互斥鎖、監視/等待謂詞、原子操作與併發模型 |
| 對應章節 | 啟動執行緒 → 第2章;互斥鎖 → 第3章;等待謂詞 → 第4章;原子操作 → 第5章 |
| 關鍵結論 | 只有 C++11 四項齊備;Boost 與 POSIX C 的原子操作欄為 N/A |
四方對照總表
C++11 之前,高階語言支援併發早已不是新鮮事:Java 第一版即支援多執行緒、多數平台提供 POSIX C 介面、Boost 將各平台底層執行緒 API 包裝成可攜介面。使用這些庫的經驗可直接借鑑到 C++11。
| 特性(章節) | C++11 | Boost 執行緒庫 | POSIX C | Java |
|---|---|---|---|---|
| 啟動執行緒(第2章) | std::thread 與其成員函式 |
boost::thread 類別與成員函式 |
pthread_t 型別相關 API:pthread_create()、pthread_detach()、pthread_join() |
java.lang.Thread 類別 |
| 互斥鎖(第3章) | std::mutex 類別、std::lock_guard<> 模板、std::unique_lock<> 模板 |
boost::mutex、boost::lock_guard<>、boost::unique_lock<> |
pthread_mutex_t 相關 API:pthread_mutex_lock()、pthread_mutex_unlock() 等 |
synchronized 區塊 |
| 監視/等待謂詞(第4章) | std::condition_variable、std::condition_variable_any 與其成員函式 |
boost::condition_variable、boost::condition_variable_any |
pthread_cond_t 相關 API:pthread_cond_wait()、pthread_cond_timedwait() 等 |
java.lang.Object 的 wait() / notify(),用於 synchronized 區塊內 |
| 原子操作與併發模型(第5章) | std::atomic<> 類別模板、std::atomic_flag、std::atomic_* 自由函式 |
N/A | N/A | java.util.concurrent 套件中的 volatile 變數與原子類別 |
各家重點觀察
- C++11:四個維度全部原生支援,且是唯一在語言層定義記憶體模型、提供可攜原子操作的一家;RAII 鎖管理(
lock_guard/unique_lock)是相對 POSIX 的關鍵優勢。 - Boost 執行緒庫:介面與 C++11 幾乎一一對應 ↔
std::——C++11 執行緒庫的設計大量源自 Boost;但表中原子操作為 N/A。 - POSIX C:純 C 介面,以
pthread_*函式 + 不透明型別(pthread_t、pthread_mutex_t、pthread_cond_t)操作;無 RAII、需手動配對 lock/unlock,亦無原子操作支援。 - Java:執行緒與互斥內建於語言(
synchronized);等待/通知掛在java.lang.Object上且必須在 synchronized 區塊內使用;原子與高階併發工具集中在java.util.concurrent。
表格反映的是本書附錄 B 的時點
「N/A」指的是該庫本體未提供:Boost 後來另有 Boost.Atomic 函式庫、C11 也加入了 <stdatomic.h>,但皆不在附錄 B 的比較範圍內。
遷移對照的用法
從 POSIX/Java/Boost 轉到 C++11 時,先按「維度 → 章節」找到對應設施:例如 pthread_cond_wait() 的手動謂詞迴圈,在 C++11 對應 std::condition_variable::wait(lk, pred) 一行(見 04-Synchronizing-Operations/01-Condition-Variables-and-Thread-Safe-Queue)。
Exam/Test Patterns
| 情境/關鍵字 | 答案 |
|---|---|
| 「Boost / POSIX C 的原子操作」 | 兩者皆 N/A(僅 C++11 與 Java 提供) |
| 「Java 的互斥機制」 | synchronized 區塊(語言內建) |
| 「Java 的等待/通知」 | java.lang.Object 的 wait()/notify(),須在 synchronized 區塊內 |
| 「POSIX 啟動/回收執行緒」 | pthread_create() / pthread_join() / pthread_detach() |
| 「POSIX 條件等待」 | pthread_cond_wait() / pthread_cond_timedwait() |
| 「與 C++11 介面幾乎一一對應的庫」 | Boost 執行緒庫(C++11 執行緒庫的前身) |
| 「四維度對應本書章節」 | 啟動=第2章、互斥=第3章、等待謂詞=第4章、原子=第5章 |