Im BeispielcodeSind statische Variablen in GCC threadsicher?
void foo()
{
static Bar b;
...
}
mit GCC zusammengestellt ist gewährleistet, dass b
erstellt und in einem Thread-sichere Weise initialisiert werden?
In Manpage gcc, fanden die -fno-THREAD-Statik Befehlszeilenoption:
Sie in dem C++ ABI für THREAD nicht den zusätzlichen Code emittieren angegeben, die Routinen zu verwenden, Initialisierung der lokalen Statik. Sie können diese Option verwenden, um Code-Größe im Code leicht zu reduzieren, dass nicht Thread-sicher sein muss.
Bedeutet es, dass lokale Statik mit GCC Thread-sicher ist standardmäßig? Es gibt also keinen Grund, explizit zu schützen, z.B. mit
pthread_mutex_lock/unlock
?Wie man tragbaren Code schreibt - wie man prüft, ob Compiler seine Wachen hinzufügt? Oder ist es besser, diese Funktion von GCC auszuschalten?
Was ist eine Thread-sichere Initialisierung, wenn Sie keinen thread-sicheren Zugriff (lokale Funktion) haben? – xtofl
Um den Mutex zu initialisieren, verwenden Sie den Zugriff auf andere Variablen. – AProgrammer
Wenn Sie portablen Code schreiben müssen, können Sie sich nicht auf die Thread-sichere Initialisierung der Funktionsstatik verlassen. Zum Beispiel macht MS C++ es nicht. Also ich stimme nicht zu Punkt 2 - Sie können es sicher deaktivieren, wenn Sie tragbaren Code schreiben möchten, aber Sie müssen nicht Funktionsstatik verwenden, wo Threadsicherheit wichtig ist ;-) – hirschhornsalz