次の擬似コードがある場合:
sharedVariable = somevalue;
CreateThread(threadWhichUsesSharedVariable);
マルチコアCPUが、親スレッドが書き込む前にsharedVariableの値を読み取るthreadWhichUsesSharedVariable()でコードを実行することは理論的に可能ですか?競合状態のごくわずかな可能性さえも完全に理論的に回避するために、コードは代わりに次のようになります。
sharedVariableMutex.lock();
sharedVariable = somevalue;
sharedVariableMutex.unlock();
CreateThread(threadWhichUsesSharedVariable);
基本的に、スレッドの生成がその時点でCPUを明示的に線形化するかどうかを知りたいのですが、そうすることが保証されています。
スレッド作成のオーバーヘッドはおそらくこれが実際には問題にならないほど十分な時間がかかることを私は知っていますが、私の完璧主義者は理論的な競合状態を恐れています。一部のスレッドまたはコアが大幅に遅れ、他のスレッドまたはコアが高速かつ効率的に実行されている極端な状況では、ロックがない限り、実行(またはメモリアクセス)の順序が逆になる可能性があると想像できます。