在同一线程的类的所有实例之间共享类的数据成员

时间:2018-09-05 09:57:23

标签: c# asp.net-mvc controller static thread-safety

在我的C# MVC项目中,我在一个类中有一个静态成员,该成员由同一类的另一个实例更新。但是问题在于,所有具有此类实例的线程也都使用相同的内存来更新静态变量。但是我不希望变量在线程之间共享。

有什么方法可以使该类的数据成员在同一线程的该类的所有实例之间共享,但是如果在不同的线程中,则可以创建一个新的内存位置?

1 个答案:

答案 0 :(得分:3)

这可能适合您的需求,也可能不适合您,但是您可能解决此问题的一种方法是使用线程静态字段

ThreadStaticAttribute Class

  

表示每个线程的静态字段值都是唯一的。

     

标记为ThreadStaticAttribute的静态字段不共享   线程。每个执行线程都有一个单独的字段实例,   并独立设置并获取该字段的值。如果该字段是   在不同的线程上访问,它将包含不同的值

请注意,除了将ThreadStaticAttribute属性应用于字段外,还必须将其定义为static

public class Example
{
   [ThreadStatic] static double previous = 0.0;
   [ThreadStatic] static double sum = 0.0;
   [ThreadStatic] static int calls = 0;
   [ThreadStatic] static bool abnormal;
   ...