「static」「スレッドセーフ」のキーワードで検索しているとタイトルのようなことに気付いたのでまとめておきます。
気付いたことは、複数のユーザーがログインして利用するようなWebアプリケーションで、変更が加わる可能性のあるstatic変数はスレッドセーフにしておくべきことです。
そもそも私はスレッドセーフやstaticについてもよく分かっていない状態で、スレッド(ユーザー)をまたいで1つのインスタンスや変数を共有するなんてことはないと思っていました。
まず、staticについて、staticクラスやメソッドはそのstaticクラスやメソッドが参照されるプログラムが読み込まれるときに読み込まれるようです。

静的クラスと静的クラス メンバー - C#
静的クラスを C# でインスタンス化することはできません。 クラス名自体を使用して、静的クラスのメンバーにアクセスします。
そして、複数のユーザーがログインして利用するようなWebアプリケーションではみんなが同一のプログラムを利用している状態なので、static変数が共有されてしまいます。

ASP.NET Webアプリケーションで、ユーザー情報はstatic変数ではなくてSession変数を使うこと
ASP.NET Webアプリケーションでは、ユーザー固有の変数は、staticではなくて、Session変数で保存すべきです。static変数を使うのは、とても注意が必要です。理由は次の通りです。Webアプリケーションでstatic変数を使
なので、変更可のstatic変数はスレッドセーフにしておく必要があります。
ただし、変更可でないstatic変数はスレッドセーフにする必要はないようです。
Just a moment...
コメント