~第3回:IISのstaticは要注意~2018.03.05どうもこんにちは。プログラマの田中智大です。月に一度で社員とサバゲーに参加してます。私はスナイパーをやってるんですが、これがまた楽しいです。なくてサーバーのお話を一つ。static変数でカウントするように実装してみました。こんな感じのプログラムです。」どういうことかを説明していきたいと思います。」というところにあります。マルチスレッドで動いている以上、時には複数のスレッドが同じタイミングで同じ処理を行う(同じ変数を使う)ことだってありえます。呼び出した時は同時に同じ値を使う事になるんです。今回説明のため、あえて関数化しています。詳細については次回以降で説明します。◆どんな動きになるの?では、今回の実装でどういった事が起きてしまう可能性があるのかこちらのアニメーションで見てみましょう。1を足したものを返すため、4人とも「100番目にアクセスした人」になり、結果4人に100万円をあげるハメになっちゃいます。気をつけないといけないのが、要求が始まったタイミングは異なったとしても、内部の処理速度の違いからある時点で全く同じタイミングで同じ関数を呼び出す事は十分にあり得ます。static変数を扱うときは、複数の要求はマルチスレッドで動く事から同時に処理が実行されてしまう可能性がある事を理解しておく必要があります。staticな変数を使ってしまっているような事はないでしょうか?もし使っている場合は、それが複数の要求で動いた時に意図した挙動になるかどうかを考えていただければと思います。採用情報クラウドクリエイティブスタジオではエンジニアの方を絶賛募集中です。