【问题标题】:C#: Do I need to lock a static class when accessing from separate threads?C#:从单独的线程访问时是否需要锁定静态类?
【发布时间】:2011-03-03 16:19:28
【问题描述】:

我有一个静态类,它有几个方法,它们只接收一个字节数组,解析它,然后返回一个结构。我需要从许多单独的线程中调用这些方法。我是否需要在方法中使用 lock() 或某种线程安全?我无法理解它。

【问题讨论】:

  • 你的方法使用静态变量吗?
  • 方法包含变量,但它们不是静态的。

标签: c# multithreading static-methods


【解决方案1】:

如果您的方法是reentrant,则不需要任何锁。

通常,只要多个线程访问共享资源,您就需要锁定。当该方法只是根据其参数计算某些东西而不访问任何共享资源时,就没有什么要锁定的了。

【讨论】:

  • 按照你的定义,他的例子不会是可重入的。
  • 这就是为什么我在答案的开头加上“如果”。从描述中我认为他的方法是可重入的,但不看代码我无法确定。
  • 谢谢,这正是我需要知道的。
【解决方案2】:

是的,lock 防止多个线程同时访问相同的数据,这通常会导致不一致/不可预测的行为。

【讨论】:

    【解决方案3】:

    如果您的方法具有共享资源,那么您需要同步访问它。你的情况是没有共享资源,因此不需要锁定任何东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      相关资源
      最近更新 更多