Wie geht C++17 mit der threadsicheren Initialisierung statischer Inline-Datenelemente über mehrere ÜbersetzungseinheitenC++

Programme in C++. Entwicklerforum
Guest
 Wie geht C++17 mit der threadsicheren Initialisierung statischer Inline-Datenelemente über mehrere Übersetzungseinheiten

Post by Guest »

Ich habe etwas über statische Inline-Variablen in C++17 und deren Initialisierung über mehrere Übersetzungseinheiten hinweg gelernt. Ich verstehe, dass statische Inline-Variablen eingeführt werden, um eine einzelne Instanz im gesamten Programm beizubehalten und gleichzeitig eine threadsichere Initialisierung sicherzustellen. Wenn Sie jedoch statische Inline-Variablen verwenden, scheint der Compiler eine Prüfung hinzuzufügen, um sicherzustellen, dass die Variable threadsicher initialisiert wird. Dies ist notwendig, da der Compiler nicht vorhersagen kann, welche Übersetzungseinheit die Initialisierung zuerst durchführen wird, da die Header-Datei in mehreren Übersetzungseinheiten enthalten ist.
Nach dem, was ich gesammelt habe, scheint es so um eine Art Schutzmechanismus zu sein (wie im unten verlinkten Assembler-Code zu sehen), der mehrere Initialisierungen verhindert.
Meine Fragen lauten also:
1 )In jeder Übersetzungseinheit gibt es einen Thread-Sicherheitsschutz für die Initialisierung während Laufzeit?
2) Ist es nach der Initialisierung der Variablen richtig, dass keine Synchronisierungsprimitive erforderlich sind, wenn im gesamten Programm auf sie zugegriffen/sie verwendet wird?
https://godbolt.org/z/hhWoK7Y3r

Code: Select all

#ifndef THING_H
#define THING_H
#include 
class Thing
{
public:
inline const static std::string name{"Miko"};
};
#endif // THING_H

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post