雖然,C++11才開始正式支持并發(fā),不過(guò),高級(jí)編程語(yǔ)言都支持并發(fā)和多線程已經(jīng)不是什么新鮮事了。例如,Java在第一個(gè)發(fā)布版本中就支持多線程編程,在某些平臺(tái)上也提供符合POSIX C標(biāo)準(zhǔn)的多線程接口,還有Erlang支持消息的同步傳遞(有點(diǎn)類似于MPI)。當(dāng)然還有使用C++類的庫(kù),比如Boost,其將底層多線程接口進(jìn)行包裝,適用于任何給定的平臺(tái)(不論是使用POSIX C的接口,或其他接口),其對(duì)支持的平臺(tái)會(huì)提供可移植接口。
這些庫(kù)或者編程語(yǔ)言,已經(jīng)寫了很多多線程應(yīng)用,并且在使用這些庫(kù)寫多線程代碼的經(jīng)驗(yàn),可以借鑒到C++中,本附錄就對(duì)Java,POSIX C,使用Boost線程庫(kù)的C++,以及C++11中的多線程工具進(jìn)行簡(jiǎn)單的比較,當(dāng)然也會(huì)交叉引用本書的相關(guān)章節(jié)。
特性 | 啟動(dòng)線程 | 互斥量 | 監(jiān)視/等待謂詞 | 原子操作和并發(fā)感知內(nèi)存模型 | 線程安全容器 | Futures(期望) | 線程池 | 線程中斷 |
章節(jié)引用 | 第2章 | 第3章 | 第4章 | 第5章 | 第6章和第7章 | 第4章 | 第9章 | 第9章 |
C++11 | std::thread和其成員函數(shù) | std::mutex類和其成員函數(shù) | std::condition_variable | std::atomic_xxx類型 | N/A | std::future | N/A | N/A |
std::lock_guard模板 | std::condition_variable_any類和其成員函數(shù) | std::atomic類模板 | std::shared_future | |||||
std::unique_lock模板 | std::atomic_thread_fence()函數(shù) | std::atomic_future類模板 | ||||||
Boost線程庫(kù) | boost::thread類和成員函數(shù) | boost::mutex類和其成員函數(shù) | boost::condition_variable類和其成員函數(shù) | N/A | N/A | boost::unique_future類模板 | N/A | boost::thread類的interrupt()成員函數(shù) |
boost::lock_guard類模板 | boost::condition_variable_any類和其成員函數(shù) | boost::shared_future類模板 | ||||||
boost::unique_lock類模板 | ||||||||
POSIX C | pthread_t類型相關(guān)的API函數(shù) | pthread_mutex_t類型相關(guān)的API函數(shù) | pthread_cond_t類型相關(guān)的API函數(shù) | N/A | N/A | N/A | N/A | pthread_cancel() |
pthread_create() | pthread_mutex_lock() | pthread_cond_wait() | ||||||
pthread_detach() | pthread_mutex_unlock() | pthread_cond_timed_wait() | ||||||
pthread_join() | 等等 | 等等 | ||||||
Java | java.lang.thread類 | synchronized塊 | java.lang.Object類的wait()和notify()函數(shù),用在內(nèi)部synchronized塊中 | java.util.concurrent.atomic包中的volatile類型變量 | java.util.concurrent包中的容器 | 與java.util.concurrent.future接口相關(guān)的類 | java.util.concurrent.ThreadPoolExecutor類 | java.lang.Thread類的interrupt()函數(shù) |