"メイン"スレッドが1つあり、グローバル変数を初期化し、そのスレッドがその変数にアクセスするスレッドを後で生成する場合は、変数が新しいスレッドに初期化されていることを保証するために、std :: atomic_thread_fence(memory_order_seq_cst)の呼び出しなどの作業私は、メインスレッドが新しいスレッドを作成するという事実は、どのレースも防止するのに十分な「同期化された」関係を確立すると考えていますが、私は確信していません。プログラムの先頭に設定されたC++のメモリセマンティクスとグローバル
は、ここで私が説明しています何のためにいくつかの擬似コードです:
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.
}