Thread safe Singleton in C#

王朝c#·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

public sealed class Singleton

{

private Singleton() {}

private static volatile Singleton _value;

private static object syncRoot = new Object();

public static Singleton Value

{

get

{

if (_value == null)

{

lock (syncRoot)

{

if (_value == null)

{

_value = new Singleton();

} //end inner if

} //end lock

} //end outer if

return _value;

} //end get

} //end Value

} //end class

• Double-check locking is used to ensure that exactly one instance is ever created and only when needed

• syncRoot is used to lock on rather than locking on the type itself to avoid deadlocks caused by outside code

• The _value instance is declared to be volatile in order to assure that the assignment to _value and any writes inside the Singleton constructor complete before the instance can be accessed

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航