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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了同一线程中类的所有实例中的类的共享数据成员相关的知识,希望对你有一定的参考价值。

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

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

答案

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

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;
   ...

以上是关于同一线程中类的所有实例中的类的共享数据成员的主要内容,如果未能解决你的问题,请参考以下文章

C# 中类的成员有哪些?

Java中的类的field到底是指啥?

类的实例作为同一类的类成员

c# 中类的实例化

PHP的类中的常量,静态变量的问题。

访问同一文件中类的私有成员的函数