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

标签 c# multithreading synchronization locking

我看到了获取锁时使用的对象的不同变体

  1. 静态私有(private)对象

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

    }

  2. 类级私有(private)对象

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

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

    public class MyClass
    {
       private void MyMethod()
       {
          lock (this)
          {
    
          }
       }
    }
    

有人可以详细说明其中每一个的优点/缺点是什么,以及在给定场景中是否应该优先选择其中一个。

最佳答案

Don't use 锁定(此)

Don't use lock(typeof(MyClass)) 两者之一。

至于staticinstance,这取决于什么适合你。如果您使用静态私有(private)对象,那么您的类的所有实例都将共享锁。如果您使用非静态的私有(private)对象,则每个实例都将拥有自己的锁。所以没有什么优点/缺点,这取决于你的需要。

关于c# - 使用什么对象类型/实例进行同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24387878/

相关文章:

android - GoogleApiClient : "Result has already been consumed" in multi-thread Android app

java - 如何获取类级锁

C# JSON 自定义序列化

c# - 将帐户链接到事件 CRM

c# - 如何用更少的代码检查 mysql 数据库中的条目

java - 如何确定 CPU 绑定(bind)任务在运行时的最佳线程数?

multithreading - 如何异步使用 "WinHttp.WinHttpRequest.5.1"?

python - python中的公平信号量

android - Gradle 同步失败 : support-core-utils

C# 标记 Charlie-Fox