Udostępnij za pośrednictwem


Obiekty synchronizacji

Obiekt synchronizacji jest obiektem, którego uchwyt można określić w jednej z funkcji oczekiwania koordynować wykonywanie wielu wątków. Więcej niż jeden proces może mieć dojście do tego samego obiektu synchronizacji, co umożliwia synchronizację międzyprocesową.

Następujące typy obiektów są udostępniane wyłącznie na potrzeby synchronizacji.

Typ Opis
Zdarzenie Powiadamia co najmniej jeden wątek oczekujący, że wystąpiło zdarzenie. Aby uzyskać więcej informacji, zobacz Event Objects.
Mutex Może być własnością tylko jednego wątku jednocześnie, umożliwiając wątkom koordynowanie wzajemnie wykluczającego się dostępu do udostępnionego zasobu. Aby uzyskać więcej informacji, zobacz Mutex Objects.
Semafor Utrzymuje liczbę z przedziału od zera do pewnej maksymalnej wartości, ograniczając liczbę wątków, które jednocześnie uzyskują dostęp do zasobu udostępnionego. Aby uzyskać więcej informacji, zobacz Semaphore Objects.
Czasomierz oczekiwania Powiadamia co najmniej jeden wątek oczekujący, że przybył określony czas. Aby uzyskać więcej informacji, zobacz Waitable Timer Objects.

 

Chociaż są dostępne w innych zastosowaniach, następujące obiekty mogą być również używane do synchronizacji.

Sprzeciwiać się Opis
Powiadomienie o zmianie Utworzony przez funkcję FindFirstChangeNotification, jej stan jest ustawiany na sygnalizowany, gdy określony typ zmiany występuje w określonym katalogu lub drzewie katalogów. Aby uzyskać więcej informacji, zobacz Uzyskiwanie powiadomień o zmianie katalogu.
Dane wejściowe konsoli Utworzono po utworzeniu konsoli. Dojście do danych wejściowych konsoli jest zwracane przez funkcję CreateFile po określeniu polecenia CONIN$ lub przez funkcję GetStdHandle. Jego stan jest ustawiony na sygnalizowany, gdy w buforze wejściowym konsoli nie ma nieprzeczytanych danych wejściowych i ustawiono wartość niepodpisaną, gdy bufor wejściowy jest pusty. Aby uzyskać więcej informacji o konsolach, zobacz Character-Mode Applications
Zadanie Utworzone przez wywołanie funkcji CreateJobObject. Stan obiektu zadania jest ustawiony na sygnał, gdy wszystkie jego procesy zostaną zakończone, ponieważ przekroczono określony limit czasu zakończenia zadania. Aby uzyskać więcej informacji na temat obiektów zadań, zobacz Obiekty zadań.
Powiadomienie o zasobie pamięci Utworzona przez funkcję CreateMemoryResourceNotification. Jego stan jest ustawiony na sygnał, gdy określony typ zmiany występuje w pamięci fizycznej. Aby uzyskać więcej informacji na temat pamięci, zobacz Zarządzanie pamięcią.
Proces Utworzone przez wywołanie funkcji CreateProcess. Jego stan jest ustawiony na niepodpisany podczas uruchamiania procesu i ustawiony na sygnalizowany po zakończeniu procesu. Aby uzyskać więcej informacji na temat procesów, zobacz Procesy i wątki.
Nitka Utworzony podczas tworzenia nowego wątku przez wywołanie funkcji CreateProcess, CreateThreadlub CreateRemoteThread. Jego stan jest ustawiony na niepodpisany, gdy wątek jest uruchomiony, i ustawiony na sygnalizowany po zakończeniu wątku. Aby uzyskać więcej informacji na temat wątków, zobacz Procesy i wątki.

 

W niektórych okolicznościach można również użyć pliku, nazwanego potoku lub urządzenia komunikacyjnego jako obiektu synchronizacji; jednak ich stosowanie w tym celu jest zniechęcane. Zamiast tego użyj asynchronicznego we/wy i zaczekaj na obiekt zdarzenia ustawiony w strukturze OVERLAPPED. Bezpieczniej jest użyć obiektu zdarzenia z powodu nieporozumień, które mogą wystąpić, gdy wiele równoczesnych nakładających się operacji jest wykonywanych na tym samym pliku, nazwanym potoku lub urządzeniu komunikacji. W takiej sytuacji nie ma możliwości poznania, która operacja spowodowała zasygnaliowanie stanu obiektu.

Aby uzyskać dodatkowe informacje na temat operacji we/wy na plikach, nazwanych potokach lub komunikacji, zobacz Synchronizacja i nakładające się dane wejściowe i wyjściowe.