Udostępnij za pośrednictwem


<mutex>

Dołącz nagłówek <mutex> standardowy do zdefiniowania klas mutex, , timed_mutexrecursive_mutexi recursive_timed_mutex; szablonów lock_guard oraz unique_locktypów pomocniczych i funkcji definiujących regiony kodu wzajemnego wykluczania.

Ostrzeżenie

Począwszy od programu Visual Studio 2015, typy synchronizacji biblioteki standardowej języka C++ są oparte na typach pierwotnych synchronizacji systemu Windows i nie używają już narzędzia ConcRT (z wyjątkiem sytuacji, gdy platforma docelowa to Windows XP). Typy zdefiniowane w programie <mutex> nie powinny być używane z żadnymi typami lub funkcjami ConcRT.

Wymagania

Nagłówek: <mutex>

Przestrzeń nazw: std

Uwagi

Uwaga

W kodzie skompilowanym przy użyciu polecenia /clrten nagłówek jest blokowany.

Klasy mutex i recursive_mutex są typami mutex. Typ mutex ma konstruktor domyślny i destruktor, który nie zgłasza wyjątków. Te obiekty mają metody, które zapewniają wzajemne wykluczenie, gdy wiele wątków próbuje zablokować ten sam obiekt. W szczególności typ mutex zawiera metody lock, try_locki unlock:

  • Metoda lock blokuje wątek wywołujący, dopóki wątek nie uzyska własności mutexu. Jego wartość zwracana jest ignorowana.

  • Metoda try_lock próbuje uzyskać własność mutexu bez blokowania. Jego zwracany typ jest konwertowany na bool i jest true , jeśli metoda uzyskuje własność, ale w przeciwnym razie false.

  • Metoda unlock zwalnia własność mutexu z wątku wywołującego.

Typy mutex można używać jako argumentów typu, aby utworzyć wystąpienie szablonów lock_guard i unique_lock. Można użyć obiektów tych typów jako Lock argumentu do funkcji składowych oczekiwania w szablonie condition_variable_any.

Typ mutexu czasowego spełnia wymagania dotyczące typu mutex. Ponadto ma try_lock_for metody i try_lock_until , które muszą być wywoływane przy użyciu jednego argumentu i muszą zwrócić typ, który jest konwertowany na bool. Typ mutexu czasowego może definiować te funkcje przy użyciu dodatkowych argumentów, pod warunkiem że wszystkie te dodatkowe argumenty mają wartości domyślne.

  • Metoda try_lock_for musi być wywoływana przy użyciu jednego argumentu chrono::duration, Rel_timektórego typem jest wystąpienie klasy . Metoda próbuje uzyskać własność mutexu, ale zwraca wartość w czasie wyznaczonym przez Rel_timemetodę , niezależnie od powodzenia. Wartość zwracana jest konwertowana na true wartość , jeśli metoda uzyskuje własność. W przeciwnym razie zwracana wartość jest konwertowana na falsewartość .

  • Metoda try_lock_until musi być wywoływana przy użyciu jednego argumentu chrono::time_point, Abs_timektórego typem jest wystąpienie klasy . Metoda próbuje uzyskać własność mutexu, ale zwraca nie później niż czas wyznaczony przez Abs_time, niezależnie od powodzenia. Wartość zwracana jest konwertowana na true wartość , jeśli metoda uzyskuje własność. W przeciwnym razie zwracana wartość jest konwertowana na falsewartość .

Typ mutex jest również nazywany typem zablokowanym. Jeśli nie udostępnia funkcji try_lockskładowej, jest to podstawowy typ blokady. Typ mutexu czasowego jest znany jako typ czasowy, który można zablokować. Czasowe bloki typu zablokowanego przez określony czas lub do momentu uzyskania blokady na mutexu.

Elementy członkowskie

Klasy

Nazwa/nazwisko opis
lock_guard Klasa Reprezentuje szablon, który może zostać utworzony w celu utworzenia obiektu, którego destruktor odblokuje mutex.
mutex Klasa (Standardowa biblioteka C++) Reprezentuje typ mutexu. Użyj obiektów tego typu, aby wymusić wzajemne wykluczenie w programie.
recursive_mutex Klasa Reprezentuje typ mutexu. W przeciwieństwie do mutex klasy zachowanie wywoływania metod blokowania dla obiektów, które są już zablokowane, jest dobrze zdefiniowane.
recursive_timed_mutex Klasa Użyj obiektów tego typu, aby wymusić wzajemne wykluczenie, które ma ograniczone czasowo blokowanie w programie. W przeciwieństwie do timed_mutexmetody , efekt wywoływania metod blokowania dla recursive_timed_mutex obiektów jest dobrze zdefiniowany.
scoped_lock Klasa
timed_mutex Klasa Użyj obiektów tego typu, aby wymusić wzajemne wykluczenie, które ma ograniczone czasowo blokowanie w programie.
unique_lock Klasa Reprezentuje szablon, który może zostać utworzony w celu utworzenia obiektów, które zarządzają blokowaniem i odblokowywaniem mutexu.

Funkcje

Nazwa/nazwisko opis
call_once Udostępnia mechanizm wywoływania określonego obiektu wywołującego dokładnie raz podczas wykonywania.
lock Próbuje zablokować wszystkie argumenty bez zakleszczenia.
swap Próbuje wymienić wewnętrzne stany dwóch mutex obiektów i x y.
try_lock Próbuje zablokować zablokowany obiekt. Zwraca natychmiast.

Struktury

Nazwa/nazwisko opis
adopt_lock_t Struktura Reprezentuje typ używany do definiowania elementu adopt_lock.
defer_lock_t Struktura Reprezentuje typ, który definiuje defer_lock obiekt używany do wybierania jednego z przeciążonych konstruktorów klasy unique_lock.
once_flag Struktura Reprezentuje element struct używany z funkcją call_once szablonu w celu zapewnienia, że kod inicjowania jest wywoływany tylko raz, nawet w obecności wielu wątków wykonywania.
try_to_lock_t Struktura Reprezentuje obiekt struct , który definiuje try_to_lock obiekt i służy do wybierania jednego z przeciążonych konstruktorów klasy unique_lock.

Zmienne

Nazwa/nazwisko opis
adopt_lock Reprezentuje obiekt, który można przekazać do konstruktorów i lock_guard unique_lock wskazać, że mutex obiekt, który jest również przekazywany do konstruktora, jest zablokowany.
defer_lock Reprezentuje obiekt, który można przekazać do konstruktora dla unique_lockelementu , aby wskazać, że konstruktor nie powinien blokować mutex obiektu, który jest również przekazywany do niego.
try_to_lock Reprezentuje obiekt, który można przekazać do konstruktora, unique_lock aby wskazać, że konstruktor powinien spróbować odblokować mutex obiekt, który jest również przekazywany do niego bez blokowania.

Zobacz też

Odwołanie do plików nagłówka