2011-02-24 3 views
1

정적 메서드 (속성, 필드 또는 다른 요소 없음) 만있는 정적 클래스가 있고 해당 메서드에 동시에 액세스하는 여러 스레드가있는 데 문제가있을 수 있습니까?정적 메서드 및 멀티 스레딩

답변

0

예, 가능합니다. 그것은 당신의 방법이 어떻게 쓰여지 느냐에 달려 있습니다. 정적 메소드 만 있다면, 이론적으로는 완전히 재진입 코드를 의미 할 것입니다.

5

공유 상태가없는 경우 또는 외부 리소스이면 아무런 위험이 없습니다. 당신은 "no fields"등을 언급했는데, 간접적으로 말하는 공유 상태가 아닌 한 (이 시나리오에서는 스레드로부터 안전하지 않은 일반적인 인수를 통해 또는 일부 을 통해 지저분한 방식으로 상태를 공유하는 유틸리티 메소드), 괜찮을 것입니다.

0

잠재적으로 가능합니다.

는 상상 :

class Logger 
{ 
    WriteToLogs(string msg) 
    { 
     // Write data to file1 
     ... 

     // Write data to file2 
     ... 
    } 
} 

지금 여러 스레드()를 동시에 WriteToLog를 호출하는 시도가 상상한다. thread1이 로그 파일에 기록하기 전에 thread2가 예약되면 어떻게됩니까? 이 경우 모든 유형의 데이터 손상으로 끝날 수 있습니다.

정적 클래스와 메소드는 본질적으로 모든 유형의 스레드 동기화, 잠금 등을 제공하지 않습니다. 이는 설계하고 구현하기위한 것입니다.

0

그렇습니다. 예를 들어 싱글 톤 구현은 정적 일 수 있지만 멀티 스레딩 문제를 방지하려면 double checked locking과 같은 메커니즘을 구현해야합니다.