2011-11-27 2 views
0

은 가정 멀티 스레드에서 정적 메서드를 실행? 우리는 CLR이 스택상의 가상 머신 기반이라는 것을 알고 있습니다. Foo.Do() 메서드를 호출하는 인스턴스에는 자체 호출 스택이 있습니다. 스택에 int arg를 푸시 한 다음 Foo.Do() 메소드를 호출합니다. 다중 쓰레드에서 Foo.Do()를 호출하는 인스턴스가 서로 방해를 일으키지 않을지 궁금합니다. 모든 인스턴스에는 Foo.Do() 또는 오히려 복사본이 있습니까?내가 클래스 아래와 같이이

답변

1

각 스레드마다 자체 호출 스택이 설정되어 있습니다. 따라서 하나의 스레드에서 함수를 호출하면 스택은에 대해서만 으로 변경됩니다. 다른 스레드는 서로 영향을 미치지 않고 원하는 다른 함수를 호출 할 수 있습니다 (공유 상태는 제외하고 다른 문제입니다. 중요한 것은 스택이 공유되지 않는다는 것입니다).

1

다중 스레드에서 Foo.Do()를 호출하는 인스턴스가 서로 방해하지 않는지 궁금합니다. 모든 인스턴스에는 Foo.Do() 또는 오히려 복사본이 있습니까?

이 경우 각 인스턴스는 괜찮을 것입니다. InvokeFoo.Do은 다른 공유 상태에 의존하지 않으므로 별도의 스레드간에 공유되는 데이터는 없습니다.

여러 스레드의 주된 문제는 개별 스레드간에 데이터를 공유하려고 할 때 발생합니다. 이때 공유 데이터에 대한 액세스를 동기화하는 데주의를 기울여야합니다.

0

Perphas 당신은 ThreadLocal API를보아야합니다. 그러면 스레드 별 저장소가있을 수 있습니다. 귀하의 경우 Reed가 제안한 바와 같이 공유 상태가 없으므로 중요하지 않습니다.하지만 ThreadLocal이 아니면 ThreadLocal이 아닌 한 정적 스토리지가 공유 될 때까지 중요합니다.

관련 문제