파이버를 스레드로 취급하지 마십시오.
업데이트: 2007년 11월
TypeName |
DoNotTreatFibersAsThreads |
CheckId |
CA2003 |
범주 |
Microsoft.Reliability |
변경 수준 |
주요 변경 아님 |
원인
관리되는 스레드가 Win32 스레드처럼 취급됩니다.
규칙 설명
관리되는 스레드는 파이버이므로 Win32 스레드로 간주하지 마십시오. CLR은 관리되는 스레드를 SQL이 소유한 실제 스레드의 맨 위에서 파이버로 실행합니다. 이러한 스레드는 AppDomains 전체에서 공유되며 SQL Server 프로세스의 데이터베이스에서도 공유됩니다. 관리되는 스레드의 로컬 저장소를 사용하면 이러한 문제를 해결할 수 있지만, 관리되지 않는 스레드의 로컬 저장소를 사용할 수 없거나 코드가 현재 OS 스레드에서 다시 실행된다고 간주할 수 없습니다. 스레드의 로캘 같은 설정은 변경하지 마십시오. CreateCriticalSection 또는 CreateMutex는 잠금 상태로 들어간 스레드를 해제하도록 요구하므로 P/Invoke를 통해 CreateCriticalSection 또는 CreateMutex를 호출하지 마십시오. 이것은 파이버를 사용하는 경우에는 문제가 되지 않으므로 Win32 임계 영역 및 뮤텍스는 SQL에서 쓸모 없게 됩니다. 관리되는 스레드 로컬 저장소 및 스레드의 현재 UI 문화권을 포함하여 관리되는 System.Thread 개체에서는 대부분의 상태를 안전하게 사용할 수 있습니다. 하지만 프로그래밍 모델로 인해 SQL에서 실행될 때는 스레드의 현재 문화권을 변경할 수 없습니다. 이 내용은 새로운 권한을 통해 적용됩니다.
위반 문제를 해결하는 방법
스레드의 사용을 검사하여 그에 따라 코드를 변경합니다.
경고를 표시하지 않는 경우
이 규칙에서는 경고를 표시해야 합니다.