Wie sind funktionierende statische Variablen initialisiert.C++

Programme in C++. Entwicklerforum
Anonymous
 Wie sind funktionierende statische Variablen initialisiert.

Post by Anonymous »

Da C ++ 11 die Initialisierung funktionierender statischer Variablen ist, ist die Gewinde. Die Variable wird (vermutlich durch einen Mutex) gesperrt und durch den ersten Thread initialisiert, der in die Funktion eingeht. < /P>
Dies muss bedeuten Ob die statischen Objekte in dieser Funktion initialisiert wurden. < /p>
Ist mein Glaube korrekt? Zumindest eine Prüfung jedes Mal, wenn die Funktion aufgerufen wird.std::mutex mutex;

bool bHasBeenInitialisedOuter = false; // ANY NUMBER OF THREADS COULD BE CHECKING THIS
bool bHasBeenInitialisedInner = false; // THIS IS A SECOND FLAG IN CASE THE RACE CONDITION ON THE FIRST FLAG MADE THE THREAD ENTER WHEN IT SHOULDN'T HAVE

void func()
{
if (!bHasBeenInitialisedOuter)
{
mutex.lock(); // ANY OTHER THREADS WAIT HERE

if (!bHasBeenInitialisedInner)
{
bHasBeenInitialisedInner = true;

// INITIALISE OBJECT

bHasBeenInitialisedOuter = true; // ANY NUMBER OF OTHER THREADS COULD BE CHECKING THIS AT THE TIME THIS THREAD WRITES TO IT
// HOWEVER IT SHOULDN'T MATTER BECAUSE THE INNER FLAG MEMORY IS FLUSHED BEFORE (OR WHEN) UNLOCKING THE MUTEX
}

mutex.unlock();
}
}
< /code>
Ich habe zwei Flags hinzugefügt, weil der erste Thread den Mutex gesperrt hat und er auf die Flagge geschrieben hat, die besagt, dass er initialisiert wurde, zu diesem Zeitpunkt könnten andere Threads diese Variable lesen. Und so ist es Rennbedingung, ist das richtig? > Was gerade auf True eingestellt wurde, ist auf globales Gedächtnis oder für andere Threads sichtbar. BR /> Obwohl es eine Rennbedingung für BhasbeeninitialiseDouter < /code> zu geben scheint, liegt dies innerhalb der Implementierung des Compilers. Ich glaube, dass dies nicht so ist, dass es sich um den Benutzercode handelt. < /p>
Ist dies so, wie C ++ statische Variablen initialisiert, um mit Atomvariablen zu eben?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post