How does lock(syncRoot) make sense on a static method?
Posted
by Rising Star
on Stack Overflow
See other posts from Stack Overflow
or by Rising Star
Published on 2010-05-18T15:18:16Z
Indexed on
2010/05/18
15:20 UTC
Read the original article
Hit count: 169
The following code is excerpted from the (Windows Identity Foundation SDK) template that MS uses to create a new Security Token Service Web Site.
public static CustomSecurityTokenServiceConfiguration Current
{
get
{
HttpApplicationState httpAppState = HttpContext.Current.Application;
CustomSecurityTokenServiceConfiguration customConfiguration = httpAppState.Get( CustomSecurityTokenServiceConfigurationKey ) as CustomSecurityTokenServiceConfiguration;
if ( customConfiguration == null )
{
lock ( syncRoot )
{
customConfiguration = httpAppState.Get( CustomSecurityTokenServiceConfigurationKey ) as CustomSecurityTokenServiceConfiguration;
if ( customConfiguration == null )
{
customConfiguration = new CustomSecurityTokenServiceConfiguration();
httpAppState.Add( CustomSecurityTokenServiceConfigurationKey, customConfiguration );
}
}
}
return customConfiguration;
}
}
I'm relatively new to multi-threaded programming. I assume that the reason for the lock
statement is to make this code thread-safe in the event that two web requests arrive at the web site at the same time.
However, I would have thought that using lock (syncRoot)
would not make sense because syncRoot
refers to the current instance that this method is operating on... but this is a static method?
How does this make sense?
© Stack Overflow or respective owner