日期:2014-05-16  浏览次数:20435 次

asp.net 单例模式下线程安全问题.
请教下,单例模式


public class Singleton
{
    private static Singleton _instance = null;
    static Singleton()
    {
        _instance = new  Singleton();
    }

    public static Singleton Instance { get {return _instance; } }
    public string Username
    {
        get
           {
                return 当前访问者的用户名(域用户)。
           }
    }
    public object Dosome()
    {
         callWebservice(Username);
    }

}


在application的 global.asax文件下。有如下代码



void Session_Start(object send , EventArg e)
{
     object obj =  Singleton.Instance.Dosome();
}


以上的Session_Start的过程,可能出现如下情况吗?

第一步 : user1登录 运行到 Dosome()获取到Singleton.Instance.Username= user1. 这里假设时间停止。
第二步 : user2在这个时间点登录,此时Singleton.Instance.Username = user2.
第三步 : 就是第一步的时间已经恢复正常,这里他再取调用callWebservice(Username ) ,这里的Username 可能是user2 吗?

------解决方案--------------------
引用:
请教下,单例模式


public class Singleton
{
    private static Singleton _instance = null;
    static Singleton()
    {
        _instance = new  Singleton();
    }

    public static Singleton Instance { get {return _instance; } }
    public string Username
    {
        get
           {
                return 当前访问者的用户名(域用户)。
           }
    }
    public object Dosome()
    {
         callWebservice(Username);
    }

}


在application的 global.asax文件下。有如下代码



void Session_Start(object send , EventArg e)
{
     object obj =  Singleton.Instance.Dosome();
}


以上的Session_Start的过程,可能出现如下情况吗?

第一步 : user1登录 运行到 Dosome()获取到Singleton.Instance.Username= user1. 这里假设时间停止。
第二步 : user2在这个时间点登录,此时Singleton.Instance.Username = user2.
第三步 : 就是第一步的时间已经恢复正常,这里他再取调用callWebservice(Username ) ,这里的Username&n