Istnieje jeden rodzaj synchronizacji, który istnieje między wątkami zwanymi zamkami. W tym przypadku wątek wymaga wzajemnego wykluczenia. Wymaga wykonania jednego wątku na raz. Następnie także jeden wspólny wzór wymagany po oddziaływaniu wielu wątków. Są - czekając i sygnalizacja. Jeden wątek będzie poczekać, aż drugi wątek zakończy swoją pracę. Po zakończeniu wykonania tego wątku wątek oczekiwania może wykonać w procesorze. Do tego rodzaju synchronizacji wątków potrzebujemy innej techniki, zwanej zajęty czekanie na niektóre zmienne. W tym celu potrzebujemy nowej prymitywnej synchronizacji zwanej zmiennymi warunku.
Ta koncepcja wątku jest dostępna w innym systemie operacyjnym. Ale przejdziemy do nazwy, zmiennych warunków, które są stosowane jako biblioteka pthread w systemie operacyjnym Linux
Funkcja pthread_cond_wait () jest składnikiem oczekiwania. Ta funkcja domyślnie wykonuje akcję odblokowywania.
Przykład programowania 1:
W tym przykładzie programowania zobaczymy, jak ta funkcja wykonuje:
#włączaćWyjście:
Wyjaśnienie
W tym przykładzie programowania istnieją dwa procesy zwane wątkiem nadrzędnym i wątkiem dziecięcym. Tutaj rodzic chce czekać na dziecko. Po zakończeniu procesu dziecięcego, rodzic rozpoczyna wykonanie.
Dla wnętrza main () tworzymy wątek rodzica i dziecięcego. Child Wątek wykonuje funkcję o nazwie dziecko (). Następnie wątek nadrzędny wywołuje połączenie funkcji. To połączenie () zasadniczo sprawdza, czy dziecko jest gotowe. W przeciwnym razie będzie czekać, używając funkcji pthread_cond_wait (). Kiedy dziecko będzie działać, nazywa Exit (). Po zakończeniu wykonania dziecka wartość zmiennej wyniesie 1. Następnie wywołuje sygnał w zmiennej warunku. Następnie rozpocznie się wykonanie wątku nadrzędnego.
Poczekaj i sygnał składnia:
void thr_exit ()Co się stanie, jeśli nie dostaniemy zamka? Nastąpi warunek wyścigu - nieudany budzenie.
PROGRAMOWANIE Przykład-2:
W tym przykładzie programowania zobaczymy kolejne zastosowanie fukcji pthread_cond_wait.
#włączaćWyjście:
Wyjaśnienie
Tutaj zobaczymy zastosowanie funkcji pthread_cond_wait (). To tak, jak gdy ktoś chce wypełnić paliwo, jego samochód. Musi poczekać, aż jego samochód zostanie wypełniony paliwem. W tym celu tworzymy dwa wątki. Jeden do napełniania paliwa samochodem i do samochodu. Zdefiniujemy dwie funkcje. Jedna to funkcja Tuele (), która określa, kiedy napełnić samochód paliwem, a druga to funkcja pojazdu (), aby uzyskać paliwo. Facet, który chce wypełnić paliwo w swoim samochodzie, musi poczekać, aż paliwo się wypełni.
Wewnątrz funkcji main () utworzymy dwa wątki do funkcji tankowania () i do pojazdu (). Teraz utworzymy zmienną warunku, aby czekać na stan. W tym celu zobaczymy wyjście. Kiedy funkcje zakończą ich wykonanie, zniszczymy te wątki.
Wniosek
Funkcja pthread_cond_wait () powiadamia, kiedy wykonaliśmy jakiś program za pomocą wielu wątków. Ta funkcja stworzy pewne zmienne warunku, aby obsłużyć te wątki. W rzeczywistości cechy tej funkcji całkowicie zależy od zasady Poczekaj i sygnalizuj teoria.