Wie funktioniert mutex oder semaphore wake-up-Prozesse?
Habe ich gelesen, dass Mutexe und Semaphoren erhalten eine Liste der wartenden Prozesse und weckt Sie auf, wenn der aktuelle thread schließt den kritischen Abschnitt. Wie Mutexe und Semaphoren tun? Nicht Sie stören der Prozess-scheduler Entscheidungen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das warten und das aufwachen erfolgt in der Regel in Zusammenarbeit mit dem scheduler. Eine mutex-Implementierung, die die Kräfte eines bestimmten einer der wartenden threads wecken ist in der Regel als eine schlechte Umsetzung.
Statt, wird der mutex oder semaphore wird dies dem scheduler, dass ein thread wartet, und so nehmen Sie es aus der "ready-to-run" - Liste. Dann, wenn der mutex entsperrt ist, oder der semaphor signalisiert, die Umsetzung wird entweder
Fragen Sie den scheduler zu wecken, einer der wartenden threads auf die Planer nach eigenem Ermessen, oder
teilt der scheduler, der alle wartenden threads sind bereit zu laufen, und dann haben Logik auf die wartenden threads so, dass alle, aber der erste zu sein, geweckt durch den scheduler zurück, um wieder zu schlafen.
Ersteres ist die bevorzugte Implementierung Wahl, aber ist nicht immer verfügbar. Die zweite ist oft betitelt als ein "donnernden Herde" - Ansatz: wenn es 1000 threads warten dann alle 1000 geweckt werden (eine große donnernde Herde " von threads), nur für 999, zurück zu gehen zu schlafen. Dies ist eine Verschwendung von CPU-Ressourcen, und-Implementierungen werden es vermeiden, wo möglich.
Dies hängt weitgehend von der Umsetzung. Beim sprechen von diesen Dingen, die wir in der Regel beziehen sich auf threads, die möglicherweise vom Betriebssystem unterstützt, oder Sie können vollständig implementiert werden, in der Sprache, und somit auch nicht die Interaktion mit dem O/S für den thread-Unterstützung.
Können Sie auch beziehen sich auf Prozesse, jedoch, aber diese Implementierungen erfordern in der Regel komplexe message-passing-Muster, zusätzlich zu einigen O/S Unterstützung für Prozess-management.
Ja, die einfache Erklärung ist, dass alle wartenden Prozess (ob semaphore oder I/O) genommen wird der scheduler die run-queue, bis seine wait-Bedingung erfüllt ist.