C の関数内で静的変数を宣言するということは、この変数が関数呼び出し間でその状態を保持することを意味することを知っています。スレッドのコンテキストでは、これにより、変数が複数のスレッドにわたってその状態を保持するか、または各スレッド間で個別の状態を持つことになりますか?
これは、私が答えるのに苦労している過去の紙の試験問題です。
次の C 関数は、呼び出し元に一意の識別子 (UID) を割り当てるために使用することを目的としています。
get_uid() { static int i = 0; return i++; }
get_uid() が複数のスレッドによって呼び出されている環境で、どのように正しく動作しないかを説明してください。特定のシナリオ例を使用して、そのような不適切な動作が発生する理由と方法を具体的に説明してください。
現時点では、各スレッドが変数に対して個別の状態を持っていると想定していますが、それが正しいかどうか、または答えが相互排除の欠如と関係があるかどうかはわかりません。その場合、この例でセマフォをどのように実装できますか?