次のコードは、MS が新しい Security Token Service Web サイトを作成するために使用する (Windows Identity Foundation SDK) テンプレートから抜粋したものです。
public static CustomSecurityTokenServiceConfiguration Current
{
get
{
var key = CustomSecurityTokenServiceConfigurationKey;
var httpAppState = HttpContext.Current.Application;
var customConfiguration = httpAppState.Get(key)
as CustomSecurityTokenServiceConfiguration;
if (customConfiguration == null)
{
lock (syncRoot)
{
customConfiguration = httpAppState.Get(key)
as CustomSecurityTokenServiceConfiguration;
if (customConfiguration == null)
{
customConfiguration =
new CustomSecurityTokenServiceConfiguration();
httpAppState.Add(key, customConfiguration);
}
}
}
return customConfiguration;
}
}
私はマルチスレッドプログラミングに比較的慣れていません。このステートメントの理由は、lock
2 つの Web 要求が Web サイトに同時に到着した場合に、このコードをスレッドセーフにするためだと思います。
lock (syncRoot)
ただし、このメソッドが動作している現在のインスタンスを参照しているため、使用は意味がないと思ってsyncRoot
いました...しかし、これは静的メソッドです!
これはどのように理にかなっていますか?