日期:2014-05-17  浏览次数:21138 次

singleton模式用static readonly instance 是不是可以保证多线程安全,能够自动实现线程同步吗?
我现在有一个全局对象LogManager,主要功能是向磁盘文件写日志信息。它可能会被多个线程调用,我用单件模式这样来实现的:
class LogManger
{
  public static readonly LogManager Instance = new LogManager();

  public void Log(string strMsg)
  {
  ......//向磁盘文件写日志
  }
};

请问这样实现在.net环境下是不是可以保证是多线程安全的?多个线程会自动同步吗?

------解决方案--------------------
不能的,你要清楚线程安全的含义:当多个线程同时访问(读/写)你的数据时,是不会互斥(你没有锁虽然你的数据是全局的)的访问你的数据的,所以是不安全的;
------解决方案--------------------
你用Lock关键字
------解决方案--------------------
lock,Monitor
http://www.cnblogs.com/yinhaiming/articles/1398933.html
------解决方案--------------------
C# code

public class LogManger
{
    public static readonly LogManger Instance = new LogManger();
    private static object _lock = new object();

    public void Log(string strMsg)
    {
        lock(_lock)
        {
            //向磁盘文件写日志     
        }
    }
}

------解决方案--------------------
探讨
C# code
public class LogManger
{
public static readonly LogManger Instance = new LogManger();
private static object _lock = new object();

public void Log(string strMsg)
{
lock(_lock)
{
//向磁盘文件写日志
}
}
}