代码之家  ›  专栏  ›  技术社区  ›  Dario Solera

在非静态类中锁定静态变量安全吗?

  •  9
  • Dario Solera  · 技术社区  · 16 年前

    我有一个管理共享资源的类。现在,由于对资源的访问依赖于许多参数,所以在程序的正常执行过程中,这个类被实例化并处理了好几次。

    共享资源不支持并发,因此需要某种类型的锁定。我想到的第一件事是在类中有一个静态实例,并在其上获取锁,如下所示:

    // This thing is static!
    static readonly object MyLock = new object();
    
    // This thing is NOT static!
    MyResource _resource = ...;
    
    public DoSomeWork() {
        lock(MyLock) {
            _resource.Access();
        }
    }
    

    这有意义吗,还是你会用另一种方法?

    1 回复  |  直到 16 年前
        1
  •  6
  •   Brian R. Bondy    16 年前

    是的,您可以使用静态变量来保护共享资源。

    你也可以用 typeof(class) as the expression inside lock . 不过,请参见下面的警告,使用静态变量,它至少在类中受到了更多的保护。

    推荐文章