Laut Wikipedia
Freigegebene Sperren werden manchmal als "Lesesperren" bezeichnet, und exklusive Sperren werden manchmal als "Schreibsperren" bezeichnet.
Können Sie die Gründe für die Begriffe "geteilt" und "exklusiv" erklären?
Laut Wikipedia
Freigegebene Sperren werden manchmal als "Lesesperren" bezeichnet, und exklusive Sperren werden manchmal als "Schreibsperren" bezeichnet.
Können Sie die Gründe für die Begriffe "geteilt" und "exklusiv" erklären?
Antworten:
Ich habe diese Antwort aufgeschrieben, weil ich dachte, dies wäre eine lustige (und passende) Analogie:
Stellen Sie sich ein abschließbares Objekt als eine Tafel (abschließbar) in einem Klassenzimmer vor, in der sich ein Lehrer (Schriftsteller) und viele Schüler (Leser) befinden.
Während ein Lehrer etwas (exklusives Schloss) an die Tafel schreibt:
Niemand kann es lesen, weil es noch geschrieben wird und sie Ihre Ansicht blockiert => Wenn ein Objekt ausschließlich gesperrt ist, können keine freigegebenen Sperren erhalten werden .
Andere Lehrer kommen ebenfalls nicht zum Schreiben oder die Tafel wird unlesbar und verwirrt die Schüler => Wenn ein Objekt ausschließlich gesperrt ist, können keine anderen exklusiven Sperren erhalten werden .
Wenn die Schüler lesen (gemeinsame Schlösser), was sich auf der Tafel befindet:
Sie alle können gemeinsam lesen, was darauf steht => Es können mehrere gemeinsam genutzte Sperren nebeneinander existieren .
Die Lehrerin wartet darauf, dass sie mit dem Lesen fertig ist, bevor sie die Tafel freigibt, um mehr zu schreiben => Wenn bereits eine oder mehrere gemeinsam genutzte Sperren vorhanden sind, können keine exklusiven Sperren erhalten werden .
lock()
Aufrufe danach ausführen kann Der erste wird sofort und erfolgreich zurückkehren. dh Sie können erfolgreich etwas sperren, das Sie bereits besitzen.
writer
den wartenden Lesern den Vorzug gibt, wenn die Sperre auswählt, wer die Sperre als nächstes erhält (wenn sie von ihrem aktuellen Eigentümer entsperrt wird). Hier geht es um Politik .
Es ist ziemlich einfach. Lesesperren werden auch als gemeinsam genutzte Sperren bezeichnet, da mehrere Prozesse gleichzeitig lesen können. Der Sinn einer Lesesperre besteht darin, die Erfassung einer Schreibsperre durch einen anderen Prozess zu verhindern. Im Gegensatz dazu verhindert eine Schreibsperre alle anderen Operationen, während eine Schreiboperation abgeschlossen wird, weshalb sie als exklusiv beschrieben wird.
Eine Lesesperre sagt also "Sie können jetzt lesen, aber wenn Sie schreiben möchten, müssen Sie warten", während eine Schreibsperre sagt "Sie müssen warten".
Mir ist klar, dass Sie zur Unterstützung Ihres Studiums recherchieren, aber ich kann dem Drang zum Vortrag nicht widerstehen.
Die inkompetente Verwendung von Sperren ist eine Hauptursache für Leistungsprobleme. Die Verwendung eines Schließsystems, das Lese- und Schreibsperren unterscheidet, ist ein guter Anfang, aber eine sorgfältige Konstruktion kann manchmal einen Großteil der Sperren überflüssig machen. Beispielsweise sollte der Sitzungsstatus niemals in einer globalen Sammlung pro Statuselement gespeichert werden.
Ich habe das tatsächlich gesehen. Es ist ein grausames Design, das bei jeder letzten Änderung des Sitzungsstatus zu Boxen und einer Änderung einer Sammlung führt und eine langwierige Schreibsperre zur Folge hat. Overheads waren lähmend und reduzierten den Server effektiv auf Single-Threaded-Verhalten.
Das einfache Zusammenfassen des gesamten Sitzungsstatus zu einer Struktur war eine enorme Verbesserung. Änderungen am Sitzungsstatus haben lediglich die Werte der Mitglieder der Statusstruktur einer Sitzung geändert. Da keine andere Sitzung Gelegenheit oder Gelegenheit hatte, direkt auf den Status einer Sitzung zu verweisen, wurde nur die Liste der Sitzungen aktualisiert. Infolgedessen war das Sperren während einer Sitzung nur zu Beginn und am Ende völlig unnötig , und der Durchsatz stieg um den Faktor 3000.
Das andere häufige Sperrszenario sind Ressourcen, die von Threads einer Benutzeranwendung gemeinsam genutzt werden. Die meisten modernen Frameworks adressieren dies eher mit Nachrichten als mit Sperren. Wenn Sie "zum UI-Thread wechseln", stellen Sie tatsächlich eine Nachricht in die Warteschlange, die einen Funktionszeiger und einige Parameter enthält (oder einen Delegaten und einen Stapelrahmen, abhängig von der Implementierung).
Eine Exklusiv- oder Schreibsperre ermöglicht einem Prozess exklusiven Zugriff zum Schreiben auf den angegebenen Teil der Datei. Während eine Schreibsperre vorhanden ist, kann kein anderer Prozess diesen Teil der Datei sperren.
Eine gemeinsame oder Lesesperre verhindert, dass andere Prozesse eine Schreibsperre für den angegebenen Teil der Datei anfordern. Andere Prozesse können jedoch Lesesperren anfordern.
Mehr dazu: http://www.gnu.org/software/libc/manual/html_node/File-Locks.html
Prinzip auch auf der Datenbankseite. Gemäß der Oracle-Dokumentation
Der exklusive Sperrmodus verhindert, dass die zugehörige Ressource gemeinsam genutzt wird. Dieser Sperrmodus wird zum Ändern von Daten verwendet. Die erste Transaktion, die ausschließlich eine Ressource sperrt, ist die einzige Transaktion, die die Ressource ändern kann, bis die exklusive Sperre aufgehoben wird.
Im Freigabesperrmodus kann die zugeordnete Ressource abhängig von den beteiligten Vorgängen freigegeben werden. Mehrere Benutzer, die Daten lesen, können die Daten gemeinsam nutzen und Freigabesperren halten, um den gleichzeitigen Zugriff eines Schreibers (der eine exklusive Sperre benötigt) zu verhindern. Mehrere Transaktionen können
Freigabesperren für dieselbe Ressource erwerben.