Share via


C26116

경고 C26116: <func>에서 잠금 유지 <lock>를 획득 또는 유지에 실패했습니다.

구문으로 범위가 지정된 취득 잠금 그리고 릴리스 쌍에서 C/C++ 프로그램은 언어에 의해 수행 되지 않습니다.함수는 잠금 부작용 동시성 상태를 크게 수정하여 발생할 수 있습니다.예를 들어, 잠금 래퍼 함수 개수를 잠금 합병 또는 지정 잠금의 잠금 횟수를 증가 시키거나 각각 _Acquires_lock_ 또는 _Requires_lock_held 를 사용하여 부작용에서 잠금 획득 또는 릴리스를 사용하여 잠금 함수에 주석을 달 수 있습니다.이러한 주석 없이 함수가 반환 된 후 모든 잠금 수를 바꿀 수 없게 발생 합니다.획득 및 릴리스 되지 않는 경우, 고아로 간주됩니다.경고 C26116는 함수 주석으로 첨부 하는 경우에 발생 _Acquires_lock_ , 잠금, 또는 함수에 주석을 지정 하는 경우를 획득 하지 않지만 _Requires_lock_held 잠금을 해제 합니다.

예제

다음 예제에서는 경고가 C26116 때문에 함수 DoesNotLock 주석이 추가 된 _Acquires_lock_ 하지만 획득 하지 않습니다.함수 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
}

참고 항목

참조

C26115