- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
如果我有一个带有静态方法的静态类,如果有多个线程在调用该方法,则该方法内的局部变量是否安全?
static class MyClass {
static int DoStuff(int n) {
int x = n; // <--- Can this be modified by another thread?
return x++;
}
}
最佳答案
对此问题的回答是,哪些状态存储在堆栈上,因此是线程安全的,所以它们是不完整的,并且可能是错误的危险。
Do threads create their own scope when executing static methods?
If I have a static class with a static method, are the instance variables within the method safe if multiple threads are calling it?
If I have a static class with a static method, are the local variables within the method safe if multiple threads are calling it?
Under what circumstances do I need to use locking or other special thread-safety techniques to ensure safe access to a variable?
Super. Let's concentrate on that "both can access the variable" part. Under what circumstances can two threads both access a local variable?
static class Foo
{
private static Func<int> f;
public static int Bar()
{
if (Foo.f == null)
{
int x = 0;
Foo.f = ()=>{ return x++; };
}
return Foo.f();
}
}
static class Foo
{
public static IEnumerable<int> f;
private static IEnumerable<int> Sequence()
{
int x = 0;
while(true) yield return x++;
}
public static Bar() { Foo.f = Sequence(); }
}
关于c# - 静态方法中的局部变量线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7187943/
我是一名优秀的程序员,十分优秀!