朱燚

--书到读透处,酒于微醺时

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
在duwamish的日志类中,全都是静态方法,其中有个静态构造函数,他的作用让我很困惑,不太了解静态构造函数的的朋友我先说说,这个函数将在第一次执行这个类的静态方法的时候执行,只执行一次,monitor类是一个负责线程同步的类,lock语句就是由这个类完成的,具体可参考msdn,和下面这篇文章http://www.cnblogs.com/henryfan/archive/2005/09/14/236716.aspx

首先,tryenter不成功后,也就是不能成功获得排他锁后,那个return让我很迷惑,

我们知道静态函数是线程安全了,那么为什么要加锁呢?我能想到的解释是防止这个类的静态变量被多线程同时访问,因为静态变量不是线程安全的,但是由于这个构造函数只会在第一次执行这个类的某静态方法时加载,其他时候不管你用多少线程去执行日志类的方法,构造函数也不会运行,那么是不是可以说他是防止程序在几个地方同事并发初始化这个类而设置的呢?

希望大家能互相应证



static ApplicationLog()
{
Type myType = typeof(ApplicationLog);
try
{
if (!Monitor.TryEnter(myType))
{
Monitor.Enter(myType);
return;
}


//在这里进行一些初始化操作,初始化本类的静态变量

        
}
finally
{
//Remove the lock from the class object
Monitor.Exit(myType);
}
}
posted on 2006-06-26 15:24  朱燚:-)  阅读(117)  评论(0编辑  收藏  举报