Angenommen, wir haben einen Thread, der prüfen möchte, wann ein anderer Thread seine Aufgabe beendet hat. Ich habe gelesen, dass wir eine Funktion vom Typ wait () aufrufen sollten, die diesen Thread warten lässt, bis er eine Benachrichtigung erhält, dass der andere Thread beendet ist. Und das ist gut so, denn wir führen keine teuren Abstimmungen durch.
Aber findet die interne Abstimmung trotzdem auf einer niedrigeren Ebene statt? Dh, wenn wir den Thread warten lassen (), führt der Kerner dann trotzdem eine Abfrage durch, um zu prüfen, wann der andere Thread fertig ist, damit er den ersten Thread benachrichtigen kann?
Ich nehme an, ich habe hier etwas verpasst, kann mich jemand aufklären?
_exit(2)
von POSIX-y-Systemen) oder unfreiwillig (z. B. ein Fehler wie eine Division durch Null erzeugt einen Interrupt oder andere Aufrufekill(2)
) beendet werden. In beiden Fällen wird die Steuerung explizit an das Betriebssystem zurückgegeben, das weiß, welcher Prozess ausgeführt wurde oder beendet werden soll. Das Beenden eines Prozesses umfasst das Freigeben seiner Ressourcen, einschließlich Mutexe. Wenn ein Mutex vom jetzt toten Prozess gehalten wurde, gibt das Betriebssystem ihn frei. Wenn der Prozess auf der Warteliste des Mutex war, wird er entfernt.