C#中的线程和静态方法

时间:2010-06-27 23:49:49

标签: c# multithreading static-methods reentrancy

这是一个无意义的扩展方法作为例子:

public static class MyExtensions
{
    public static int MyExtensionMethod(this MyType e)
    {
        int x = 1;
        x = 2;

        return x
    }
}

说执行线程完成并包括以下行:

x = 2; 

处理器然后上下文切换,另一个线程进入相同的方法并完成该行:

int x = 1;

我是否正确假设第一个线程创建并分配的变量“x”位于由第二个创建并分配的变量“x”的单独堆栈上,这意味着此方法是可重入的?

3 个答案:

答案 0 :(得分:14)

是的,每个线程都有自己独立的局部变量。即使多个线程同时调用,此函数也将始终返回2。

答案 1 :(得分:2)

是的,这是一个正确的评估。 x是方法局部变量,不会在MyExtensionMethod的调用之间共享。

答案 2 :(得分:0)

很简单,是的。静态方法仅意味着可以在没有对象的情况下调用该方法。方法中的局部变量仍然是本地的。