是C#中不同线程共享的静态类

时间:2011-03-22 16:29:24

标签: c# multithreading static

我需要在线程之间共享一个值而不超出它的边界。静态变量是否可以执行此操作?

5 个答案:

答案 0 :(得分:12)

静态变量在AppDomain中的多个线程之间共享。所有线程都将在静态变量的同一实例上查看并执行操作。因此,如果您使用静态,您可能希望使用某种形式的同步来保护该变量的访问。

如果你想拥有一个线程局部变量,那么ThreadLocal<T>类就可以轻松实现。它提供了一种生成和使用每个线程唯一的数据的方法。

答案 1 :(得分:11)

您的意思是您希望变量是线程本地的?

您可以使用{4}}属性或.NET 4中的[ThreadStatic]类。

如果你 使用.NET 4,我个人更喜欢ThreadLocal<T> - 但如果可以的话,最好还是避免这种情况。您可以将信息封装到用于启动线程的实例中吗?例如?

答案 2 :(得分:3)

ThreadStaticAttribute装饰它,使静态变量仅在初始化的线程中共享。

默认情况下,静态变量跨越AppDomain中的所有线程。

答案 3 :(得分:2)

是,请应用ThreadStaticAttribute

答案 4 :(得分:0)

是的你需要注意同步。