Welche Typen auf einem 64-Bit-Computer sind in GNU C und GNU C von Natur aus atomar?
Im Gegensatz zu C11 und höher oder C 11 und höher, die Folgendes bereitstellen Garantien für die Atomizität mit den Typen _Atomic oder std::atomic, die C- und C-Sprachstandards selbst geben keine Garantien für atomare Lesevorgänge und schreibt. Stattdessen hängt der Grad der Atomizität von der Compiler-Implementierung und der Zielarchitektur ab.
Auf einem 64-Bit-Computer, auf dem Linux auf einem x86-64-Prozessor läuft, variiert die natürliche Atomizität verschiedener Datentypen. Die GNU C- und GNU C-Compiler (gcc und g) bieten bestimmte Atomizitätsstufen für bestimmte Typen.
Atomtypen:
-
int: Das typedef _Atomic_word im Header zeigt an, dass int atomar ist.
-
__sig_atomic_t: Die Typdefinition im Header definiert einen atomaren Integer-Typ, der atomare Lese- und Schreibvorgänge bei asynchronen Interrupts gewährleistet.
Nichtatomare Typen:
- int64_t (long long)
- uint64_t (unsigned long long)
- double (64-bits)
- langes Doppel (auch 64-Bit)
Zusätzliche Hinweise:
- Atomizität bezieht sich auf atomare Lese- und Schreibvorgänge, nicht auf atomare Inkremente, Dekremente oder Verbindungen Zuweisung.
- Es ist wichtig zu beachten, dass bestimmte Typen in bestimmten Fällen garantiert atomar sind Kontexte (z. B. volatile sig_atomic_t ist atomar in Bezug auf Signale), sie sind nicht unbedingt atomar in Bezug auf Threads.
- Der Compiler kann Code auf eine Weise optimieren, die Annahmen über die Atomizität bricht, insbesondere wenn diese Annahmen nicht explizit sind in den Sprachstandards angegeben.
- Um einen threadsicheren gleichzeitigen Zugriff zu gewährleisten, ist die explizite Verwendung der Typen _Atomic oder std::atomic vorgesehen empfohlen.
Das obige ist der detaillierte Inhalt vonWelche Datentypen sind auf einem 64-Bit-GNU-C/C-System von Natur aus atomar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!