使用什么对象类型/实例进行同步

本文关键字:实例 同步 类型 什么 对象 | 更新日期: 2023-09-27 18:10:01

我看到过获取锁时使用的不同对象

  1. 静态私有对象

    public class MyClass
    {
      private static object syncBlock = new object();
      private void MyMethod()
      {
          lock (syncBlock)
          {
          }
      }
    

    }

  2. 类级私有对象

    public class MyClass
    {
       private object syncBlock = new object();
       private void MyMethod()
       {
           lock (syncBlock)
           {
           }
       }
    }
    
  3. 使用类型本身

    public class MyClass
    {
       private void MyMethod()
       {
           lock (typeof (MyClass))
           {
           }
       }
    }
    
  4. 使用这个:
  5. public class MyClass
    {
       private void MyMethod()
       {
          lock (this)
          {
          }
       }
    }
    

有没有人能详细说明一下这些方法的优缺点,以及在给定的场景中,是否应该优先使用这些方法?

使用什么对象类型/实例进行同步

不要用lock(this)

也不要用lock(typeof(MyClass))

对于staticinstance,这取决于你适合什么。如果您使用static private object,那么类的所有实例将共享锁。如果您使用的private object不是静态的,那么每个实例将拥有自己的锁。所以没有利弊,这取决于你需要什么