Heim >Backend-Entwicklung >C++ >Welche C- und C-Typen zeigen auf einem 64-Bit-x86-64-System von Natur aus atomares Verhalten?

Welche C- und C-Typen zeigen auf einem 64-Bit-x86-64-System von Natur aus atomares Verhalten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-14 07:40:11985Durchsuche

Which C and C   Types Exhibit Naturally Atomic Behavior on a 64-Bit x86-64 System?

Welche C- und C-Typen sind auf einem 64-Bit-Computer von Natur aus atomar?

Im Gegensatz zu Sprachstandards behandeln GNU C- und GNU C-Compiler Atomizität basierend auf bestimmten Architekturen. Während C11 und C 11 _Atomic-Typen und std::atomic<> einführen. Dieser Artikel konzentriert sich ausschließlich auf natürlich atomare Lese- und Schreibvorgänge, ausgenommen atomare Inkremente, Dekremente oder zusammengesetzte Zuweisungen.

Atomizitätsgarantien auf 64-Bit-Linux-Computern

Auf einem 64-Bit-Linux Computer mit einem x86-64-Prozessor, die folgenden Typen verfügen natürlich über atomare Lesevorgänge und schreibt:

  • int
  • _Atomic_word

Es ist jedoch wichtig zu beachten, dass selbst diese Typen gemäß den Sprachstandards nicht definitiv automatisch atomar sind.

Atomizität verstehen

Es gibt zwei Hauptsinne von „atomic“:

  • Atomar in Bezug auf Signale: Stellt sicher, dass Signalhandler, die während der Ausführung verschiedener Anweisungen aufgerufen werden, nur den alten oder neuen Wert einer flüchtigen sig_atomic_t-Variable sehen.
  • Atomar in Bezug auf Threads: Garantiert, dass der gleichzeitige Zugriff auf ein Objekt zu einem führt Der korrekte Wert wird von allen Threads gesehen. Um dies zu erreichen, sind _Atomic- oder std::atomic-Typen erforderlich.

Compiler-Optimierungen und Atomizität

Nur ​​weil ein Typ auf Hardwareebene von Natur aus atomar ist, heißt das nicht, dass der Compiler wird immer atomare Anweisungen verwenden, um darauf zuzugreifen. Optimierungen können zu nicht-atomarem Zugriff führen, selbst für Datentypen, von denen bekannt ist, dass sie auf der Zielhardware atomar sind.

Zum Beispiel ist ein Ladevorgang aus einer 32-Bit-Ganzzahl auf x86 atomar, ein Compiler jedoch möglicherweise Verwenden Sie eine 16-Bit-Teilladung oder einen Speicher, der nicht garantiert atomar ist.

Fazit

Zusammenfassend, da Es gibt keine Typen in C oder C, die auf einem 64-Bit-Computer definitiv automatisch atomar sind. Um den atomaren Zugriff sicherzustellen, ist es wichtig, die Typen _Atomic oder std::atomic zu verwenden oder sich auf die Dokumentation zu verlassen, um atomare Garantien für bestimmte Architekturen und Compiler zu überprüfen.

Das obige ist der detaillierte Inhalt vonWelche C- und C-Typen zeigen auf einem 64-Bit-x86-64-System von Natur aus atomares Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn