2010-01-04 6 views
1

MSDN 포럼에서 한 가지 질문을했지만 두 가지 답변이 있습니다. 일반적으로 스레딩이 정적 클래스와 함께 작동하는 방법을 알기 쉽게 설명합니다. 내 코드가 (아래) 정적 메서드를 동시에 10 개의 스레드에서 호출하는 경우 스레드 안전합니까? 코드가 어떻게 뒤에서 흘러가 는가? 모든 스레드가 그 자체 내에서 코드를 실행합니까 (비 정적 클래스로 생각하는 것처럼) 또는 정적 메소드와 다른 점은 정적, 모든 스레드가 코드에 도달하여 충돌하려고하기 때문입니까? 감사!정적 메서드 및 스레드

public static class A 
{ 

    static void Method(object parameter) 
    { 
     SqlCeConnection = ..... 
    } 
} 

MSDN 질문 링크 : Here

PS : 나는 일반적으로 (인해 나는, 존 소총의 대답은 좋다 "대답"을 "의 코멘트를 추가"또는 클릭 수 없습니다 IE의 페이지 오류 죄송합니다 :)

+0

msdn 포럼 링크를 게시하거나 답변 내용을 알려주십시오. –

+1

링크가 표시되었습니다. 두 답변이 맞지 않습니다. 처음에는 '비동기 적으로 (동시에) 실행됩니다'라고 말합니다. 이 말이 맞습니다. 그러나 동기화가 없으면 결과가 잘못됩니다. 두 번째 것은 '그들은 동일한 코드를 실행할 것입니다'라고 말합니다 (그는 동시에 비동기 적으로 말하지 않습니다) –

답변

6

비 정적 클래스와 정확히 동일합니다. 정적 인 것은 실제로 아무 것도 영향을 미치지 않습니다. 정적 메서드는 일반적으로 이고 스레드 안전성은입니다. 그들은 이 아니며 자동으로 스레드 안전하지만 thread-safe 방식으로 구현해야합니다.

코드가 공유 상태를 사용하지 않는 경우 정상이어야합니다. 그리고 예, 어떤 잠금도없이, 모든 쓰레드는 같은 방법을 동시에 실행할 수 있습니다.

0

좋은 예제는 싱글 톤 패턴 일 수 있습니다.이 모든 것은 주어진 클래스에 대한 단일 인스턴스이며 생성자를 비공개로 만들고 인스턴스에 액세스 할 정적 메서드 나 속성을 제공하여 확인할 수 있습니다. 다음 코드 조각 같은를 선택 : -

class MyClass 
{ 
private MyClass() 
{ 

} 

public static MyClass Instance 
{ 
    get 
    { 
     lock(typeof(MyClass)) 
     { 
      if(__instance == null) 
       __instance = new MyClass(); 
     } 
     return __instance; 
    } 
} 

}

은 "인스턴스"방법은 정적 (일관된 액세스 스레드)로 표시되기 때문에

, 그러나 당신이 알아서 manully해야하는 멀티 스레드 envoirnment에서 (잠금을 사용) .