lock 语句(C# )

lock 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。此语句的形式如下:

Object thisLock = new Object();
lock (thisLock)
{
// Critical code section
}
lock
确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,则它将一直等待(即被阻止),直到该对象被释放。

lock 调用块开始位置的 Enter 和块结束位置的Exit。

通常,应避免锁定 public 类型,否则实例将超出代码的控制范围。常见的结构 lock (this)lock (typeof (MyType))lock ("myLock") 违反此准则:

  • 如果实例可以被公共访问,将出现 lock (this) 问题。
  • 如果 MyType 可以被公共访问,将出现 lock (typeof (MyType)) 问题。
  • 由于进程中使用同一字符串的任何其他代码将共享同一个锁,所以出现 lock(“myLock”) 问题。

最佳做法是定义 private 对象来锁定, 或 private static 对象变量来保护所有实例所共有的数据。

   #region DAL对象实例化
private static DAL.SO.So_AccountDAL _instance = null;
        private static object lockobject = new object();
        public static DAL.SO.So_AccountDAL Instance
        {
            get
            {
                if (_instance == null)
                {
                    lock (lockobject)
                    {
                        _instance = new DAL.SO.So_AccountDAL();
                    }
                }
                return _instance;
            }
        }
#endregion
posted @ 2010-12-13 10:49  王金鹏  阅读(161)  评论(0编辑  收藏  举报