GNU/Linux >> Linux Esercitazione >  >> Linux

Come funziona effettivamente sig_atomic_t?

sig_atomic_t non è un tipo di dati atomico. È solo il tipo di dati che puoi utilizzare nel contesto di un gestore di segnale, tutto qui. Quindi meglio leggere il nome come "atomico relativo alla gestione del segnale".

Per garantire la comunicazione con e da un gestore di segnale, è necessaria solo una delle proprietà dei tipi di dati atomici, ovvero il fatto che read e update vedranno sempre un valore consistente. Altri tipi di dati (come forse long long ) potrebbe essere scritto con diverse istruzioni assembler per la parte inferiore e superiore, ad es. sig_atomic_t è garantito per essere letto e scritto in una volta sola.

Quindi una piattaforma può scegliere qualsiasi tipo di base intero come sig_atomic_t per cui può fare la garanzia che volatile sig_atomic_t può essere tranquillamente utilizzato nei gestori di segnali. Molte piattaforme hanno scelto int per questo, perché sanno che per loro int è scritto con una singola istruzione.

L'ultimo standard C, C11, ha tipi atomici, ma che sono una cosa completamente diversa. Alcuni di essi (quelli "senza blocco") possono essere utilizzati anche nei gestori di segnale, ma anche questa è una storia completamente diversa.


Nota che sig_atomic_t non è thread-safe, solo segnale asincrono sicuro.

Gli atomi implicano due tipi di barriere:

  1. Barra del compilatore. Si assicura che il compilatore non riordini le letture/scritture da/a una variabile atomica rispetto alle letture e scritture su altre variabili. Questo è ciò che volatile la parola chiave fa.
  2. Barriera e visibilità della CPU. Si assicura che la CPU non riordini letture e scritture. Su x86 tutti i caricamenti e gli archivi nell'archiviazione allineata a 1,2,4,8 byte sono atomici. La visibilità fa in modo che i negozi diventino visibili ad altri thread. Ancora una volta, sulle CPU Intel, gli archivi sono immediatamente visibili ad altri thread grazie alla coerenza della cache e al protocollo di coerenza della memoria MESI. Ma questo potrebbe cambiare in futuro. Vedere §8.1 OPERAZIONI ATOMICHE BLOCCATE in Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 3A per maggiori dettagli.

Per una trattazione completa dell'argomento guarda Atomic Weapons:The C++ Memory Model and Modern Hardware.


Linux
  1. Che cos'è un Makefile e come funziona?

  2. Che cos'è un server Web e come funziona un server Web?

  3. Ssh – Come funziona Tcp-keepalive in Ssh?

  4. Cos'è il DNS e come funziona?

  5. Come funziona rm? Cosa fa rm?

Come funziona Git?

Come funziona SFTP?

Ssh:come funziona il tunneling Ssh inverso?

Linux:come funziona il display di Linux?

Come funziona la memoria di scambio in Linux?

Come funziona il display di Linux?