다음을 통해 공유


C26105

경고 C26105: 잠금 위반 순서.<lock> 잠금을 획득합니다. <level> 수준으로 순서가 반전이 됩니다.

동시성 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);
}