首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

singleton方式用static readonly instance 是不是可以保证多线程安全,能够自动实现线程同步吗

2012-09-27 
singleton模式用static readonly instance 是不是可以保证多线程安全,能够自动实现线程同步吗?我现在有一

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)
{
//向磁盘文件写日志
}
}
}

热点排行