Share via


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);
}