2010-06-27 4 views
12

예로 들어 의미없는 확장 방법 :스레딩 정적 메소드 여기

x = 2; 

프로세서 다음 콘텍스트 스위치 :

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

     return x 
    } 
} 

가 실행 스레드는 광고를 포함 개까지 완료 말할 다른 스레드가 동일한 메서드를 입력하고 행을 완료합니다.

int x = 1; 

Am I corre ct는 첫 번째 스레드에 의해 생성되고 할당 된 변수 "x"가 두 번째 스택에 의해 생성되고 할당 된 변수 "x"와 별도의 스택에 있다고 가정합니다. 즉,이 메서드는 재진입 적이라는 의미입니까?

답변

14

예, 각 스레드는 자체 별도의 로컬 변수를 가져옵니다. 이 함수는 여러 스레드에서 동시에 호출 된 경우에도 항상 2를 반환합니다.

2

예, 올바른 평가입니다. x은 메소드 로컬 변수이며 MyExtensionMethod의 호출간에 공유되지 않습니다.

0

확실히 간단합니다. 정적 메서드는 메서드가 개체없이 호출 될 수 있음을 의미합니다. 메소드 내의 로컬 변수는 여전히 로컬입니다.