Wenn ich einen Thread, der "Main" -Thread, eine globale Variable initialisieren und dieser Thread spawns später einige Threads, die auf diese Variable zugreifen, muss ich tun Jede Arbeit, wie ein Aufruf von std :: atomic_thread_fence (memory_order_seq_cst), um sicherzustellen, dass die Variable für die neuen Threads initialisiert erscheint? Ich vermute, dass die Tatsache, dass der Haupt-Thread die neuen Threads erstellt, eine "synchronisierte-mit-Beziehung" schafft, die ausreicht, um irgendwelche Rennen zu verhindern, aber ich bin mir nicht sicher.C++ Speicher Semantik und Globals, die am Anfang eines Programms gesetzt werden
Hier einige Pseudo-Code für das, was ich beschreibe:
class MyApi {
public:
static void init(Foo *foo) {
MyApi::foo = foo;
}
static Foo* getSharedFoo() {
return foo;
}
private:
static Foo* foo;
};
void main() {
Foo* foo = new Foo();
MyApi::init(foo);
// Spawn threads that will call MyApi::getSharedFoo() and expect
// to receive the same foo that is created above.
}