Udostępnij za pośrednictwem


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_ptrto , 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 ciniostream , , wcincoutclogwcoutcerrwcerri 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.

Zobacz też

Standardowa biblioteka C++ — przegląd