我需要在线程之间共享一个值而不超出它的边界。静态变量是否可以执行此操作?
答案 0 :(得分:12)
静态变量在AppDomain中的多个线程之间共享。所有线程都将在静态变量的同一实例上查看并执行操作。因此,如果您使用静态,您可能希望使用某种形式的同步来保护该变量的访问。
如果你想拥有一个线程局部变量,那么ThreadLocal<T>
类就可以轻松实现。它提供了一种生成和使用每个线程唯一的数据的方法。
答案 1 :(得分:11)
您的意思是您希望变量是线程本地的?
您可以使用{4}}属性或.NET 4中的[ThreadStatic]
类。
如果你 使用.NET 4,我个人更喜欢ThreadLocal<T>
- 但如果可以的话,最好还是避免这种情况。您可以将信息封装到用于启动线程的实例中吗?例如?
答案 2 :(得分:3)
用ThreadStaticAttribute
装饰它,使静态变量仅在初始化的线程中共享。
默认情况下,静态变量跨越AppDomain中的所有线程。
答案 3 :(得分:2)
答案 4 :(得分:0)
是的你需要注意同步。