問題は、その状態を読み返し、それについて何かを行うときに発生します。書き込みは危険です。これが 1 つの単語である限り、ほとんどの環境では書き込みがアトミックであることを保証しますが、それは、このフラグメントを含むより大きなコードがスレッドセーフであることを意味しません。まず、おそらくグローバル変数には最初から異なる値が含まれていたと思われます。それ以外の場合、それが常に同じであることがわかっている場合、なぜ変数なのですか? 第二に、おそらく最終的にこの値をもう一度読み返すと思いますか?
問題は、おそらく、何らかの理由でこのビットの共有状態に書き込みを行っていることです。何かが発生したことを知らせるためですか? ここで問題が発生します。ロック構造がない場合、メモリ アクセスの暗黙の順序はまったくありません。あなたの例には実際には変数の使用が含まれていないため、ここで何が問題なのかを指摘するのは難しいため、ニュートラルな C ライクな構文の簡単な例を次に示します。
int x = 0, y = 0;
//thread A does:
x = 1;
y = 2;
if (y == 2)
print(x);
//thread B does, at the same time:
if (y == 2)
print(x);
スレッド A は常に 1 を出力しますが、スレッド B が 0 を出力することは完全に有効です。スレッド A での操作の順序は、スレッド A で実行されているコードから観察できる必要があるだけです。スレッド B は、状態の任意の組み合わせを確認できます。x と y への書き込みは、実際には順番どおりに行われない場合があります。
これは、ほとんどの人がこの種の並べ替えを予期していないシングル プロセッサ システムでも発生する可能性があります。コンパイラによって並べ替えが行われる場合があります。SMP では、コンパイラーが順序を変更しなくても、メモリー書き込みが別々のプロセッサーのキャッシュ間で順序変更される場合があります。
それがあなたの答えにならないようであれば、質問にあなたの例の詳細を含めてください。変数を使用しないと、そのような使用法が安全かどうかを明確に判断することはできません。