我有一个多线程应用程序,它运行一个包含public static variable
的方法。
我想知道这个public static variable
是否与每个线程是分开的。
是否可以通过其他线程更改值?
答案 0 :(得分:6)
它不是线程安全的。
static
个变量存在于AppDomain
的生命周期中。除非它是const
或readonly
..然后它们可以被应用程序中的任何线程变异。
答案 1 :(得分:2)
如果您希望静态变量与分开,则每次使用TreadLocal<T>
类。例如让我们Random
(默认情况下不是线程安全的)是线程安全的:
public class Sample {
private static ThreadLocal<Random> s_Generator = new ThreadLocal<Random>(
() => new Random());
public static Random Generator {
get {
return s_Generator.Value;
}
}
答案 2 :(得分:1)
static
个变量由所有应用程序线程共享。实际上,这是在线程之间共享状态的一种方式。
您可以通过使用ThreadStatic
属性进行装饰来创建一个静态变量thread-local(即每个线程将有一个单独的变量副本)。例如:
class WithThreadStatic
{
[ThreadStatic]
public static bool IsSad = true;
}