<mutex>
Dołącz nagłówek <mutex>
standardowy do zdefiniowania klas mutex
, , timed_mutex
recursive_mutex
i recursive_timed_mutex
; szablonów lock_guard
oraz unique_lock
typó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 /clr
ten 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_lock
i 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 nabool
i jesttrue
, jeśli metoda uzyskuje własność, ale w przeciwnym raziefalse
.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 argumentuchrono::duration
,Rel_time
którego typem jest wystąpienie klasy . Metoda próbuje uzyskać własność mutexu, ale zwraca wartość w czasie wyznaczonym przezRel_time
metodę , niezależnie od powodzenia. Wartość zwracana jest konwertowana natrue
wartość , jeśli metoda uzyskuje własność. W przeciwnym razie zwracana wartość jest konwertowana nafalse
wartość .Metoda
try_lock_until
musi być wywoływana przy użyciu jednego argumentuchrono::time_point
,Abs_time
którego typem jest wystąpienie klasy . Metoda próbuje uzyskać własność mutexu, ale zwraca nie później niż czas wyznaczony przezAbs_time
, niezależnie od powodzenia. Wartość zwracana jest konwertowana natrue
wartość , jeśli metoda uzyskuje własność. W przeciwnym razie zwracana wartość jest konwertowana nafalse
wartość .
Typ mutex jest również nazywany typem zablokowanym. Jeśli nie udostępnia funkcji try_lock
skł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_mutex metody , 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_lock elementu , 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. |