C26117
경고 C26117: <lock> unheld 잠금 해제 <func> 기능입니다.
적용 범위 구문이 잠금 취득 및 잠금 릴리스 쌍에서 C/C++ 프로그램 언어에 의해 수행 됩니다.함수 잠금 부작용 동시성 상태를 크게 수정 하 여 발생할 수 있습니다.예를 들어, 잠금 래퍼 함수 잠금 합병 또는 지정 된 잠금에 대 한 잠금 횟수를 증가 시킵니다.잠금 쪽 취득 하거나 잠금 해제를 사용 하 여 효과 가진 함수에 주석을 달 수 _Acquires_lock_ 또는 _Releases_lock_, 각각.이러한 주석 없이 함수 반환 후 잠금 개수는 변경 될 예정입니다.경우 획득 및 릴리스 균형이 됩니다로 간주 됩니다 고아.경고 C26117 함수를 주석으로 처리 하지 때 발급 한 _Releases_lock_ 이 해제 하기 전에 함수 잠금을 소유 해야 하기 때문에 보유 하지 않는 잠금 해제 합니다.
예제
때문에 다음 예제에서는 C26117 경고를 생성 함수 ReleaseUnheldLock 반드시 보유 하지 않는 잠금 해제-상태 flag 모호-주석이 지정 할 것입니다.
typedef struct _DATA
{
CRITICAL_SECTION cs;
} DATA;
int flag;
void ReleaseUnheldLock(DATA* p)
{
if (flag)
EnterCriticalSection(&p->cs);
// code ...
LeaveCriticalSection(&p->cs);
}
다음 코드 또한 동일한 조건에서 출시 된 잠금을 가져온 것을 보장 하 여 문제를 해결 합니다.
typedef struct _DATA
{
CRITICAL_SECTION cs;
} DATA;
int flag;
void ReleaseUnheldLock(DATA* p)
{
if (flag)
{
EnterCriticalSection(&p->cs);
// code ...
LeaveCriticalSection(&p->cs);
}
}