2011-12-21 3 views
3

가능한 중복과 클래스의 동시 사용 :
Is the C# static constructor thread safe?정적 생성자가

나는 긴 정적 생성자를 실행과 같은 정적 클래스를 사용하여 다중 스레드를 가지고있다.

모든 스레드에서이 클래스의 동시 사용은이 스레드 중 하나에 의해 발생하는 정적 클래스 '생성자 호출이 완료된 후에 만 ​​사용할 수 있습니까?

답변

3

예, 물론입니다. 이것은 C# 스펙 10.12 절에서 보장됩니다. 스레드에 대해 말하는 좀 더 명시적인 비트를 찾으려고합니다.이 섹션에서는 스레드가 한 번만 실행된다는 것을 보장합니다.

일종의 "재귀 초기화"설정이있는 경우 클래스가 완전히 초기화되기 전에 코드 실행을 종료 할 수 있습니다. 두 정적 생성자가 서로 의존하면 결국 각 클래스가 다른 스레드에서 초기화되면 교착 상태가 발생합니다.

빈 정적 생성자가 있으면 정적 생성자가없는 경우 정적 초기화 생성자의 타이밍에 영향을 줄 수 있으므로 필드를 초기화 할 때 CLR에 여유가 생깁니다. (실제 동작은 시간이 지남에 따라 변경되었지만 항상 사양 내에서 변경되었습니다.) 정적 필드 초기화 프로그램에 대한 자세한 내용은 10.5.5.1 절을 참조하십시오.

기본적으로 정적 생성자는 가능한 간단하고 독립적으로 유지하십시오.

관련 문제