关于多线程:C#中的线程和静态方法

Threading and static methods in C#

这里以一个无意义的扩展方法为例:

1
2
3
4
5
6
7
8
9
10
public static class MyExtensions
{
    public static int MyExtensionMethod(this MyType e)
    {
        int x = 1;
        x = 2;

        return x
    }
}

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

1
x = 2;

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

1
int x = 1;

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


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


是的,这是一个正确的评估。 x 是方法局部变量,不会在 MyExtensionMethod.

的调用之间共享


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