2010-06-27 98 views
12

這裏是一個無意義的擴展方法作爲示例:線程和靜態方法在C#

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

     return x 
    } 
} 

假設執行的線程高達完成幷包括線:

x = 2; 

然後處理器上下文切換並且另一個線程進入相同的方法並完成該行:

int x = 1; 

我是否正確ct假設由第一個線程創建和分配的變量「x」在第二個創建和分配的變量「x」的獨立堆棧上,意味着此方法是可重入的?

回答

14

是的,每個線程都有自己獨立的局部變量。即使被多個線程同時調用,該函數也會始終返回2。

2

是的,這是一個正確的評估。 x是方法局部變量,不會在調用MyExtensionMethod之間共享。

0

很簡單,是的。靜態方法僅意味着可以在沒有對象的情況下調用該方法。方法內的局部變量仍然是本地的。