Diese Frage befasst sich mit der Erstellung eines 64-Bit-Atomzählers aus 32-Bit-Atomzahlen. Der Zähler verfügt über einen einzelnen Schreiber und mehrere Lesegeräte, wobei der Schreiber ein Signalhandler ist, der nicht blockieren darf.
Die vorgeschlagene Lösung verwendet einen Generationszähler, wobei das niedrige Bit als Lesesperre verwendet wird. Leser versuchen es erneut, bis die Generationszahl während des gesamten Lesevorgangs stabil ist und das Low-Bit nicht gesetzt ist.
Der bereitgestellte Code folgt im Allgemeinen den korrekten Designprinzipien eines SeqLock, einem bekannten Muster zur Implementierung sperrenfreier Atomzähler mit Sequenznummern. Die Verwendung der Speicherreihenfolge ist sinnvoll und stellt sicher, dass der Zähler atomar aktualisiert wird.
Es ist jedoch zu beachten, dass die Verwendung atomarer RMW-Operationen für die Erhöhung der Nutzlast nicht erforderlich ist, wenn die Das System unterstützt das kostengünstigere 64-Bit-Atomaddition oder -Laden. Stattdessen genügt ein einfaches Laden beider Hälften, gefolgt von einem nicht-atomaren Inkrement und der atomaren Speicherung des Ergebnisses.
Darüber hinaus kann der Sequenzzähler auch atomare RMW-Operationen vermeiden, sofern er nicht als Spinlock verwendet wird mehrere Autoren. Mit einem einzigen Writer können reine Ladevorgänge und reine Stores mit Release-Reihenfolge verwendet werden, die effizienter sind als atomare RMW oder Stores mit seq_cst-Reihenfolge.
Um die Einschränkungen von zu umgehen atomar
Eine andere Alternative wäre die Implementierung einer SeqLock-Vorlage, die dynamisch prüft, ob das Ziel sperrenfreie atomare Operationen auf atomarem
Zusammenfassend lässt sich sagen, dass der bereitgestellte Code dort eine funktionale Implementierung eines 64-Bit-Atomzählers mit 32-Bit-Atomfunktionen darstellt sind potenzielle Optimierungen und Alternativen, die die Leistung verbessern und den Code vereinfachen könnten.
Das obige ist der detaillierte Inhalt vonWie kann ein 64-Bit-Atomzähler nur mit 32-Bit-Atomzählern implementiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!