GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie funktioniert sig_atomic_t eigentlich?

sig_atomic_t ist kein atomarer Datentyp. Es ist nur der Datentyp, den Sie im Kontext eines Signalhandlers verwenden dürfen, das ist alles. Lesen Sie den Namen also besser als "atomar relativ zur Signalverarbeitung".

Um die Kommunikation mit und von einem Signalhandler zu gewährleisten, wird nur eine der Eigenschaften atomarer Datentypen benötigt, nämlich die Tatsache, dass read und update immer einen konsistenten Wert sehen. Andere Datentypen (wie etwa long long ) könnte mit mehreren Assembleranweisungen für den unteren und oberen Teil geschrieben werden, z. sig_atomic_t wird garantiert in einem Rutsch gelesen und geschrieben.

Eine Plattform kann also einen beliebigen Integer-Basistyp als sig_atomic_t wählen wofür er garantieren kann, dass volatile sig_atomic_t kann sicher in Signalhandlern verwendet werden. Viele Plattformen wählten int dafür, weil sie wissen, dass für sie int wird mit einer einzigen Anweisung geschrieben.

Der neueste C-Standard, C11, hat atomare Typen, die aber etwas völlig anderes sind. Einige von ihnen (diejenigen, die "lockfree" sind) können auch in Signalhandlern verwendet werden, aber das ist wieder eine ganz andere Geschichte.


Beachten Sie, dass sig_atomic_t ist nicht Thread-sicher, nur Async-Signal-sicher.

Die Atomik beinhaltet zwei Arten von Barrieren:

  1. Compiler-Barriere. Es stellt sicher, dass der Compiler Lese-/Schreibvorgänge von/in eine atomare Variable relativ zu Lese- und Schreibzugriffen auf andere Variablen nicht neu ordnet. Das ist was volatile Schlüsselwort tut.
  2. CPU-Barriere und Sichtbarkeit. Es stellt sicher, dass die CPU Lese- und Schreibvorgänge nicht neu ordnet. Auf x86 sind alle Lade- und Speichervorgänge für ausgerichteten 1,2,4,8-Byte-Speicher atomar. Sichtbarkeit stellt sicher, dass Stores für andere Threads sichtbar werden. Auch hier sind Speicher auf Intel-CPUs aufgrund der Cache-Kohärenz und des Speicherkohärenzprotokolls MESI sofort für andere Threads sichtbar. Aber das kann sich in Zukunft ändern. Siehe §8.1 LOCKED ATOMIC OPERATIONS in Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A für weitere Details.

Für eine umfassende Behandlung des Themas sehen Sie Atomwaffen:Das C++-Speichermodell und moderne Hardware.


Linux
  1. Was ist ein Makefile und wie funktioniert es?

  2. Was ist NGINX? Wie funktioniert es?

  3. Ssh – Wie funktioniert TCP-Keepalive in Ssh?

  4. Was ist DNS und wie funktioniert es?

  5. Wie funktioniert der ps-Befehl?

Wie funktioniert Git?

Wie funktioniert SFTP?

Ssh – Wie funktioniert Reverse-SSH-Tunneling?

Linux – Wie funktioniert die Anzeige von Linux?

Wie funktioniert Swap-Speicher in Linux?

Wie funktioniert die Anzeige von Linux?