app9bergamo.com

  

Beste Artikel:

  
Main / Wie Semaphor funktioniert interne Definition

Wie Semaphor funktioniert Interne Definition

Was sind die Unterschiede zwischen Mutex und Semaphore? Wann wird Mutex verwendet und wann wird Semaphor verwendet? Unser Ziel ist es, den Leser über diese Konzepte aufzuklären und von anderen Experten zu lernen. Warum brauchen wir solche Synchronisationsprimitive? Um diese Fragen zu beantworten, müssen wir einige Schlüsselwörter verstehen. Bitte lesen Sie die Beiträge zu Atomizität und kritischem Abschnitt. Wir werden anhand von Beispielen veranschaulichen, um diese Konzepte gut zu verstehen, anstatt der üblichen Textbeschreibung des Betriebssystems zu folgen.

Das Produzenten-Konsumenten-Problem: Beachten Sie, dass der Inhalt eine allgemeine Erklärung ist. Praktische Details variieren mit der Implementierung. Betrachten Sie das Standardproblem zwischen Produzent und Verbraucher. Angenommen, wir haben einen Puffer mit einer Länge von 4096 Byte. Ein Producer-Thread sammelt die Daten und schreibt sie in den Puffer. Ein Consumer-Thread verarbeitet die gesammelten Daten aus dem Puffer. Ziel ist es, dass nicht beide Threads gleichzeitig ausgeführt werden.

Ein Mutex bietet gegenseitigen Ausschluss. Sowohl der Produzent als auch der Verbraucher können den Schlüssel-Mutex haben und mit ihrer Arbeit fortfahren. Solange der Puffer vom Hersteller gefüllt wird, muss der Verbraucher warten und umgekehrt. Zu jedem Zeitpunkt kann nur ein Thread mit dem gesamten Puffer arbeiten. Das Konzept kann mithilfe von Semaphoren verallgemeinert werden. Ein Semaphor ist ein verallgemeinerter Mutex.

Anstelle eines einzelnen Puffers können wir den 4-KB-Puffer in vier identische Ressourcen mit 1-KB-Puffern aufteilen. Diesen vier Puffern kann ein Semaphor zugeordnet werden. Verbraucher und Hersteller können gleichzeitig an verschiedenen Puffern arbeiten. Es gibt eine Mehrdeutigkeit zwischen binärem Semaphor und Mutex. Aber das sind sie nicht! Der Zweck von Mutex und Semaphor ist unterschiedlich. Genau genommen ist ein Mutex ein Sperrmechanismus, mit dem der Zugriff auf eine Ressource synchronisiert wird. Nur eine Aufgabe kann ein Thread sein oder ein Prozess, der auf der Betriebssystemabstraktion basiert, kann den Mutex erfassen.

Dies bedeutet, dass mit Mutex Eigentum verbunden ist und nur der Eigentümer den Sperrmutex freigeben kann. Ja, es ist möglich, dass ein Thread mehr als eine Ressource benötigt, daher die Sperren. Ein Mutex ist ein Schloss. Der Programmierer muss den Mutex so oft entsperren, wie er gesperrt wurde.

Dies liegt daran, dass kein anderer Thread den Mutex entsperren kann. Ein Betriebssystemimplementierer kann den Eigentümer von Mutex sorgfältig identifizieren und zurückgeben, wenn dieser bereits von demselben Thread gesperrt ist, um Deadlocks zu vermeiden.

Bei einem binären Semaphor können jedoch dieselben kritischen Probleme auftreten. E. Wir werden diese in einem späteren Artikel behandeln. Einige Betriebssysteme verwenden denselben wortkritischen Abschnitt in der API. Schließlich ist das Ziel von Mutex der atomare Zugang.

Es gibt andere Möglichkeiten, einen atomaren Zugriff zu erreichen, z. B. das Deaktivieren von Interrupts, die viel schneller sein können, aber die Reaktionsfähigkeit beeinträchtigen.

Die alternative API deaktiviert Interrupts. Die Semantik von Mutex, Semaphor, Ereignis, kritischem Abschnitt usw. ist dieselbe. Alle sind Synchronisationsprimitive. Aufgrund ihrer Kosten für ihre Verwendung unterscheiden sie sich.

Wir sollten die OS-Dokumentation für genaue Details konsultieren. Es wird nicht empfohlen, den Blockierungsaufruf nach der Verfügbarkeit von Synchronisationsprimitiven in einem ISR abzufragen.

Ein ISR kann jedoch ein Semaphor signalisieren oder einen Mutex entsperren. Jedem Synchronisationsprimitiv ist eine Warteliste zugeordnet.

Wenn die Ressource nicht verfügbar ist, wird der anfordernde Thread von der laufenden Prozessorliste in die Warteliste des Synchronisationsprimitivs verschoben. Wenn die Ressource verfügbar ist, erhält der Thread mit der höheren Priorität auf der Warteliste die Ressource genauer. Dies hängt von den Planungsrichtlinien ab. Untersuchen Sie auch die Lesersperren und Schreibsperren in der Qt-Dokumentation. Wenn wir beispielsweise eine Wortanwendung oder einen Adobe Reader in Windows beobachten, wird im Task-Manager nur eine Instanz angezeigt.

Wie implementiere ich es? Bitte schreiben Sie Kommentare, wenn Sie etwas Falsches finden oder weitere Informationen zu dem oben diskutierten Thema teilen möchten.

Code in Kommentar schreiben? Bitte benutze ide. Was zum Teufel! Verwenden von Mutex: Verwenden von Semaphor: Allgemeine Fragen: Kann ein Thread mehr als eine Sperre für Mutex erwerben? Kann ein Mutex mehrmals gesperrt werden? Was passiert, wenn ein nicht rekursiver Mutex mehr als einmal gesperrt ist? Sind binäres Semaphor und Mutex gleich?

Ein Programmierer kann Mutex vorziehen, anstatt ein Semaphor mit der Anzahl 1 zu erstellen. Was ist ein Mutex und ein kritischer Abschnitt? Was sind Ereignisse? Muss ein Thread immer blockieren, wenn keine Ressource verfügbar ist? Empfohlene Beiträge: Kommentare laden.

(с) 2019 app9bergamo.com