併發函式庫對照 (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::mutexboost::lock_guard<>boost::unique_lock<> pthread_mutex_t 相關 API:pthread_mutex_lock()pthread_mutex_unlock() synchronized 區塊
監視/等待謂詞(第4章) std::condition_variablestd::condition_variable_any 與其成員函式 boost::condition_variableboost::condition_variable_any pthread_cond_t 相關 API:pthread_cond_wait()pthread_cond_timedwait() java.lang.Objectwait() / notify(),用於 synchronized 區塊內
原子操作與併發模型(第5章) std::atomic<> 類別模板、std::atomic_flagstd::atomic_* 自由函式 N/A N/A java.util.concurrent 套件中的 volatile 變數與原子類別

各家重點觀察

表格反映的是本書附錄 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.Objectwait()/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章