C26105
경고 C26105: 잠금 순서 위반수준 <level>을 사용하여 잠금 <lock>을 취득하면 순서가 반전됩니다.
동시성 SAL 지원 잠금 수준을 지원합니다.문자열 리터럴은 이중 인용 부호 없이 가리키는 잠금 수준을 선언 하려면 _Create_lock_level_ 을 사용합니다.주석을 사용하여 두 가지 잠금 수준 간의 인식의 순서를 부과할 수 _Set_lock_level_order_(A,B) , 잠금을 하는 상태 수준이 A 수준 잠금 전에 취득 해야 B 합니다.잠금 순서 계층 (잠금 수준 중에서 반대 순서) 설정, 다중 사용 _Set_lock_level_order_ 주석을 사용합니다.잠금 잠금 수준을 사용하여 연결을 사용 하는 _Set_lock_level_ 잠금 선언할 때 주석을 선언합니다.경고 C26105는 순서 위반 잠금을 감지 될 때 발생 합니다.
예제
다음 예제에서는 경고가 C26105 함수에서 잠금 순서 반전 때문에 OrderInversion 를 생성합니다.
_Create_lock_level_(MutexLockLevel);
_Create_lock_level_(TunnelLockLevel);
_Create_lock_level_(ChannelLockLevel);
_Lock_level_order_(MutexLockLevel, TunnelLockLevel);
_Lock_level_order_(TunnelLockLevel, ChannelLockLevel);
_Has_lock_level_(MutexLockLevel) HANDLE gMutex;
struct Tunnel
{
_Has_lock_level_(TunnelLockLevel) CRITICAL_SECTION cs;
};
struct Channel
{
_Has_lock_level_(ChannelLockLevel) CRITICAL_SECTION cs;
};
void OrderInversion(Channel* pChannel, Tunnel* pTunnel)
{
EnterCriticalSection(&pChannel->cs);
// Warning C26105
WaitForSingleObject(gMutex, INFINITE);
EnterCriticalSection(&pTunnel->cs);
LeaveCriticalSection(&pTunnel->cs);
LeaveCriticalSection(&pChannel->cs);
}