Skip to main content
 首页 » 编程设计

c#之为什么在实例化类中需要锁不是每个实例都有自己的数据等吗

2024年01月29日27me-sa

在 C# 中,类级变量不是线程安全的(对此有任何异常(exception)吗?让我知道)。所以我必须将这个变量的使用(就像在同一个类中的方法中)包装在一个锁中。

但是,使用 new 的想法让我认为每个类实例都有自己的实例等,并且永远不会共享一个实例变量,因此对该方法的调用永远看不到任何共享数据。那么为什么一个实例化的类需要锁定它的类级变量呢?只有当两个线程访问相同的内存地址时才需要锁,但我认为情况并非总是如此?

谢谢

请您参考如下方法:

您可以创建一个类的实例,并从多个线程访问它。例如:

 MyClass classInstance = new MyClass(); 
 Task.Factory.StartNew( () => 
       { 
             classInstance.DoSomething(); 
       }); 
 
 Task.Factory.StartNew( () => 
       { 
             classInstance.DoSomething(); 
       }); 

这两个任务都将在后台线程上执行,并使用相同的实例 - “classInstance”指向的实例。如果类是可变的,则需要同步。