c# - 可以在 C# 中跨多个对象锁定工作吗?

标签 c# multithreading static locking critical-section

我一直在寻找一种锁定特定代码段的方法。

namespace x
{
   public class y
   {
      private Object obj = new Object();
      private void A()
      {
         lock(obj)
         {
            //critical section
         }
      }
   }
}

根据请求,我的应用程序从不同来源进入方法 A(使用类 Y),并且可以看出锁定对象无法保护关键部分。

我正在寻找保护关键部分的方法,即使多个对象尝试访问该代码段并且我不想使用静态锁定对象。

请帮助我。

最佳答案

锁定可以完成这项工作,但是您锁定了一个实例字段,它只会保护同一实例的关键部分。如果您想锁定所有实例,请将您的标志 (Obj) 设为静态。

namespace x 
{ 
    public class y 
    { 
        static private Object obj = new Object();

        private void A() 
        { 
            lock(obj) 
            { 
                //critical section 
            } 
        } 
    } 
}

关于c# - 可以在 C# 中跨多个对象锁定工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43494692/

相关文章:

c# - 单元测试内部列表<String>

c# - 应用程序在 windows xp 中运行良好,但在 windows 7 中运行时应用程序崩溃?

php - 如何解决创建多个静态页面的问题

C#静态类为什么要用?

c# - 如何防止窗口最小化?

c# - 在 C# 的 php(pcre) 中找到的分支重置运算符 ("?|"的等价物是什么?

c++ - 线程间的线程安全通信

Node.js 集群 - 每个核心 1 个工作线程会减慢主线程速度?

java - 在 Java 中的多个线程之间共享一个 int 或一个整数对象

c++ - 在 constexpr 函数中声明为静态的文字字符串