当前位置:  开发笔记 > 编程语言 > 正文

锁(objlocker)是否使该对象线程安全app宽?静态成员是否自动线程安全?

如何解决《锁(objlocker)是否使该对象线程安全app宽?静态成员是否自动线程安全?》经验,为你挑选了1个好方法。

当你锁定一个对象时,该对象是否在整个应用程序中被锁定?

例如,Cuts 3.0中的这个片段在Nutshell Section 19.6.1"Thread Safety and .NET Framework Types"中:

static void AddItems(  )
  {
    for (int i = 0; i < 100; i++)
      lock (list)
        list.Add ("Item " + list.Count);

    string[] items;
    lock (list) items = list.ToArray(  );
    foreach (string s in items) Console.WriteLine (s);
  }

第一次锁定:

lock (list)
        list.Add ("Item " + list.Count);

防止其他线程访问:

lock (list) items = list.ToArray(  );

或者都可以同时执行?

CLR会自动使您的静态方法线程安全吗?或者这取决于开发人员?

谢谢,约翰



1> Richard Szal..:

另外需要注意的是静态构造函数是由运行时以线程安全的方式执行的.如果要创建单例并将其声明为:

public class Foo
{
    private static Foo instance = new Foo();

    public static Foo Instance
    {
        get { return instance; }
    }
}

然后它将是线程安全的.但是,如果你实例化一个新的Foo 的实例吸气,那么你就需要编写自己的线程安全(即锁定对象)

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有