コード内に、関数静的オブジェクトが一度作成され、その関数が呼び出されるたびに使用(コピー)される場所がいくつかあります。これらの関数の1つは、任意のスレッドから呼び出すことができます。この関数は、この静的オブジェクト以外の共有状態にはアクセスしません。
スレッド1が初めて関数を呼び出すと、オブジェクトが作成され、初期化されます。ただし、(運が良ければ)プログラムがスレッド2に切り替わり、初期化が完了する前に同じ関数を呼び出すという繰り返しのケースがあります。オブジェクトは、不正なデータとともに割り当てられ、使用されています。
これをどう処理するかわかりません。初期化コードでクリティカルセクションを使用していますが、それも問題ではありません。このオブジェクトは、最初に初期化される前に使用されています。
__declspec(thread)を使用してこのスレッドをローカルにしようとしましたが、オブジェクトでは機能しないようです。
全体をクリティカルセクションで囲むこともできますが、それが最善の解決策かもしれませんが、コードの他の部分でこのような問題が発生するのではないかと心配しています。一般的な解決策があると便利です。