C++ 標準程式庫中的執行緒安全
下列執行緒安全性規則適用於 C++ 標準程式庫中的所有類別 (這包括 shared_ptr
),如下所述。 有時會提供更強的保證,例如標準 iostream 物件,如下所述,以及用於多執行緒的類型,例如 <atomic>
。
物件為安全執行緒,可供從多個執行緒讀取。 例如,提供物件 A,則可以安全地同時從執行緒 1 和執行緒 2 讀取 A。
如果某個執行緒正在寫入物件,則必須保護相同或其他執行緒上,對該物件進行的所有讀取和寫入。 例如,提供物件 A 時,如果執行緒 1 正在寫入至 A,則必須防止執行緒 2 讀取或寫入至 A。
即使另一個執行緒正在讀取或寫入相同類型的不同實例,還是可以安全地讀取和寫入類型的某個實例。 例如,假設物件 A 和 B 的類型相同,則當 A 線上程 1 中寫入且 B 正線上程 2 中讀取時,這是安全的。
shared_ptr
即使物件是共用擁有權的複本,多個執行緒也可以同時讀取和寫入不同的 shared_ptr
物件。
iostream
標準 iostream 物件 cin
、 cout
、、、 clog
cerr
wcin
、 wcout
wcerr
和 wclog
遵循與其他類別相同的規則,但例外狀況如下:從多個執行緒寫入物件是安全的。 例如,執行緒 1 可以與執行緒 2 同時寫入 cout
。 不過,這可能會導致混合來自兩個執行緒的輸出。
注意
從資料流緩衝區中讀取,不視為讀取作業。 相反地,它被視為寫入作業,因為類別的狀態已變更。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應