本篇簡單介紹 C++11 在各平台下如何實現,
C++11其實它是個標準,定義出通用標準的api接口,在各平台下各編譯器各自實作,以答到標準,
類似工業標準 大家制定好規範,各家去實現該功能,
由於該標準的一些功能在各平台下,大多有已經有各自的實作了,例如:std::thread, std::mutex, std::condition_variable,所以基本只是將這些接口在各平台下轉換成該平台的對應的接口就可以了,
舉例,在 LLVM 原始碼裡頭可以發現 std::thread 建立一條 thread 在 unix 平台下是靠 pthread 的 pthread_create 去實作,在 windows 平台下則是靠 _beginthreadex
所以其實可以想成 C++11 的 thread 是多了一層封裝,當然還有加上一些 C++ 好用的特性,
以下整理出各平台的對應api,對於 LLVM 原始碼是如何在各平台實作可以參考下方的相關連結。
std::thread | unix | windows |
---|---|---|
std::thread |
pthread_create |
_beginthreadex |
std::thread::join |
pthread_join |
WaitForSingleObjectEx |
std::thread::detach |
pthread_detach |
|
std::thread::get_id |
pthread_self |
GetCurrentThreadId |
std::thread::yield |
sched_yield |
SwitchToThread |
std::this_thread::sleep_for |
nanosleep |
Sleep |
std::mutex | ||
std::mutex::lock |
pthread_mutex_lock |
AcquireSRWLockExclusive |
std::mutex::unlock |
pthread_mutex_unlock |
LeaveCriticalSection |
std::condition_variable | ||
std::condition_variable::notify_one |
pthread_cond_signal |
WakeConditionVariable |
std::condition_variable::notify_all |
pthread_cond_broadcast |
WakeAllConditionVariable |
std::condition_variable::wait |
pthread_cond_wait |
SleepConditionVariableSRW |
參考資源
從 pthread 轉換到 std::thread
https://www.cntofu.com/book/46/linux_system/cong_pthread_zhuan_huan_dao_std__thread.md
C++ 11是如何封裝Thread庫的?
https://www.zhihu.com/question/30553807
C++並發編程實戰-讀書簡記
http://lanbing510.info/2017/09/29/Cpp-Concurrency-In-Action.html
第 7 章 並行與並發 - 現代 C++ 教程: 高速上手 C++ 11/14/17/20
https://changkun.de/modern-cpp/zh-cn/07-thread/index.html
相關主題
std::thread 怎麼實作的?
std::condition_variable 怎麼實作的?
std::mutex 怎麼實作的?
C++11 在各平台下如何實現?