C#locking - 全局静态变量

时间:2018-05-01 01:43:42

标签: c# asp.net asp.net-mvc multithreading thread-safety

在我的Global.cs中,有一个公共静态字典变量名“DataDict”。我试图在global.cs中的'Post Authentication'方法之后将一些数据设置为字典对象,并在其中一个控制器/ api类中使用它。我试图防止在多线程环境中破坏数据。编码如样本#1。我的问题是,我可以使用方法#2吗?它将是线程安全的,数据不会被破坏(或)没有锁定问题。思考#1更安全吗?

//示例#1

if (Global.DataDict !=null && Global.DataDict.Count > 0)
    {
       lock (lockObj)
        {
           if (Global.DataDict !=null && Global.DataDict.Count > 0)
          {
                var key = GetKeyInfo();
                var data = Global.DataDict[key];
           }
        }
    }

// Sample - 2

if (Global.DataDict !=null && Global.DataDict.Count > 0)
{
  lock (lockObj)
    {
    var key = GetKeyInfo();
    var data = Global.DataDict[key];
    }
}

0 个答案:

没有答案