다음을 통해 공유


경고 C26116

'func'에서 잠금 'lock'을 획득하거나 보유하지 못했습니다.

C/C++ 프로그램에서 구문적으로 범위가 지정된 잠금 획득 및 잠금 릴리스 쌍의 적용은 언어에 의해 수행되지 않습니다. 함수가 현재 상태를 크게 수정함으로써 잠금 부작용이 발생할 수 있습니다. 예를 들어 잠금 래퍼 함수는 지정된 잠금에 대해 잠금 획득 횟수 또는 잠금 수를 증분합니다. _Acquires_lock_ 또는 _Requires_lock_held을 사용하면 각각 잠금 획득 또는 잠금 해제로 인한 부작용이 있는 함수를 주석 처리할 수 있습니다. 이러한 주석 없이는 함수가 반환 후 잠금 수를 변경하지 않을 것으로 예상됩니다. 획득 및 릴리스가 균형이 맞지 않으면 분리된 것으로 간주됩니다. 경고 C26116은 함수에 주석이 추가 _Acquires_lock_되었지만 잠금을 획득하지 않거나 함수에 주석을 추가하고 _Requires_lock_held 잠금을 해제할 때 발생합니다.

예시

다음 예제에서는 함수 DoesNotLock 에 주석 _Acquires_lock_ 이 추가되었지만 함수를 획득하지 않으므로 경고 C26116을 생성합니다. 함수 DoesNotHoldLock 는 주석이 추가되고 _Requires_lock_held 저장되지 않으므로 경고를 생성합니다.

typedef struct _DATA
{
    CRITICAL_SECTION cs;
} DATA;

_Acquires_lock_(p->cs) void DoesLock(DATA* p)
{
    EnterCriticalSection(&p->cs); // OK
}

_Acquires_lock_(p->cs) void DoesNotLock(DATA* p)
{
    // Warning C26116
}

_Requires_lock_held_(p->cs) void DoesNotHoldLock(DATA* p)
{
    LeaveCriticalSection(&p->cs); // Warning C26116
}

참고 항목