GNU/Linux >> Znalost Linux >  >> Linux

Jak vlastně sig_atomic_t funguje?

sig_atomic_t není atomární datový typ. Jde pouze o datový typ, který smíte používat v kontextu obsluhy signálu, to je vše. Takže raději čtěte název jako "atomový vzhledem ke zpracování signálu".

Pro zaručení komunikace s a ze signálového handleru je potřeba pouze jedna z vlastností atomických datových typů, a to skutečnost, že čtení a aktualizace budou vždy vidět konzistentní hodnotu. Jiné datové typy (například long long ) lze napsat s několika instrukcemi assembleru pro nižší a vyšší část, např. sig_atomic_t je zaručeno, že se přečte a zapíše jedním tahem.

Platforma si tedy může vybrat jakýkoli základní typ celého čísla jako sig_atomic_t za což může poskytnout záruku, že volatile sig_atomic_t lze bezpečně použít v obslužných zařízeních signálů. Mnoho platforem zvolilo int za to, protože vědí, že pro ně je int je zapsána jedinou instrukcí.

Nejnovější standard C, C11, má atomové typy, které jsou ale úplně něco jiného. Některé z nich (ty, které jsou "bez zámku") lze také použít v obslužných programech signálů, ale to je opět úplně jiný příběh.


Všimněte si, že sig_atomic_t není bezpečný pro vlákna, pouze bezpečný pro asynchronní signál.

Atomy zahrnují dva typy bariér:

  1. Překážka kompilátoru. Zajišťuje, že kompilátor nezmění pořadí čtení/zápisu z/do atomové proměnné vzhledem ke čtení a zápisu do jiných proměnných. To je to, co volatile klíčové slovo ano.
  2. Biéra a viditelnost CPU. Zajišťuje, že CPU nemění pořadí čtení a zápisu. Na x86 jsou všechna zatížení a ukládání do zarovnaného 1,2,4,8bajtového úložiště atomická. Viditelnost zajišťuje, že obchody budou viditelné pro ostatní vlákna. Opět platí, že na procesorech Intel jsou obchody okamžitě viditelné pro ostatní vlákna díky koherenci mezipaměti a koherenci paměti protokolu MESI. To se ale může v budoucnu změnit. Další podrobnosti najdete v §8.1 LOCKED ATOMIC OPERATIONS v Intel® 64 a IA-32 Architectures Software Developer’s Manual Volume 3A.

Pro komplexní zpracování předmětu hodinky atomové zbraně:model paměti C++ a moderní hardware.


Linux
  1. Jak Awk ‚!a[$0]++‘ funguje?

  2. Jak Sticky Bit funguje?

  3. Jak funguje vidlicová bomba?

  1. Co je Makefile a jak funguje?

  2. Co je DNS a jak funguje?

  3. Jak funguje příkaz ps?

  1. Co je NGINX? Jak to funguje?

  2. Co je webový server a jak webový server funguje?

  3. Ssh – Jak funguje Tcp-keepalive v Ssh?