Powiedzmy, że mamy wątek, który chce sprawdzić, kiedy inny wątek zakończy swoje zadanie. Przeczytałem, że powinniśmy wywołać funkcję typu wait (), która sprawi, że ten wątek zaczeka, aż otrzyma powiadomienie o zakończeniu drugiego wątku. I to jest dobre, ponieważ oznacza to, że nie przeprowadzamy drogich ankiet.
Ale czy i tak ankietowanie nie odbywa się wewnętrznie na niższym poziomie? Czyli jeśli sprawimy, że wątek zaczeka (), jądro i tak nie wykonuje odpytywania, aby sprawdzić, kiedy drugi wątek jest zakończony, aby mógł następnie powiadomić pierwszy wątek?
Przypuszczam, że coś tu brakuje, czy ktoś może mnie oświecić?
_exit(2)
Wywoływanie w systemach POSIX-y) lub mimowolnie (np. Błąd taki jak dzielenie przez zero generuje przerwanie lub coś innego wywołujekill(2)
). W obu przypadkach kontrola jest wyraźnie przekazywana z powrotem do systemu operacyjnego, który wie, który proces był uruchomiony lub ma zostać zabity. Zadanie zakończenia procesu obejmuje uwolnienie jego zasobów, w tym muteksów. Jeśli muteks był przetrzymywany przez nieżywy proces, system operacyjny go zwolni. Jeśli proces był na liście oczekujących mutexów, zostanie on usunięty.