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