Bezpieczeństwo wątku w standardowej bibliotece C++
Następujące reguły bezpieczeństwa wątków mają zastosowanie do wszystkich klas w standardowej bibliotece języka C++ — obejmuje shared_ptr
to , zgodnie z poniższym opisem. Czasami zapewnia się silniejsze gwarancje — na przykład standardowe obiekty iostream, zgodnie z poniższym opisem, i typy przeznaczone do wielowątku, takie jak te w elem <atomic>
.
Obiekt jest bezpieczny wątkowo do odczytu z wielu wątków. Na przykład, biorąc pod uwagę obiekt A, można bezpiecznie odczytać A z wątku 1 i z wątku 2 jednocześnie.
Jeśli obiekt jest zapisywany przez jeden wątek, wszystkie operacje odczytu i zapisu w tym obiekcie w tym samym lub innych wątkach muszą być chronione. Na przykład, biorąc pod uwagę obiekt A, jeśli wątek 1 jest zapisywany w A, wówczas wątek 2 musi być uniemożliwiony odczyt lub zapis do A.
Można bezpiecznie odczytywać i zapisywać w jednym wystąpieniu typu, nawet jeśli inny wątek odczytuje lub zapisuje w innym wystąpieniu tego samego typu. Na przykład, biorąc pod uwagę obiekty A i B tego samego typu, jest bezpieczne, gdy A jest zapisywany w wątku 1, a B jest odczytywany w wątku 2.
shared_ptr
Wiele wątków może jednocześnie odczytywać i zapisywać różne shared_ptr
obiekty, nawet jeśli obiekty są kopiami współwłaścicieli.
iostream
Standardowe obiekty cin
iostream , , wcin
cout
clog
wcout
cerr
wcerr
i wclog
są zgodne z tymi samymi regułami co inne klasy, z tym wyjątkiem: bezpieczne jest zapisywanie w obiekcie z wielu wątków. Na przykład wątek 1 może zapisywać w cout
tym samym czasie co wątek 2. Może to jednak spowodować mieszanie danych wyjściowych z dwóch wątków.
Uwaga
Odczyt z buforu strumienia nie jest uważany za operację odczytu. Zamiast tego jest uważana za operację zapisu, ponieważ stan klasy jest zmieniany.