Share via


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 物件 cincout 、、、 clogcerrwcinwcoutwcerrwclog 遵循與其他類別相同的規則,但例外狀況如下:從多個執行緒寫入物件是安全的。 例如,執行緒 1 可以與執行緒 2 同時寫入 cout 。 不過,這可能會導致混合來自兩個執行緒的輸出。

注意

從資料流緩衝區中讀取,不視為讀取作業。 相反地,它被視為寫入作業,因為類別的狀態已變更。

另請參閱

C++ 標準程式庫概觀