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

问题描述 投票:1回答:1

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

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

c# asp.net-mvc controller static thread-safety
1个回答
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;
   ...
© www.soinside.com 2019 - 2024. All rights reserved.