다음을 통해 공유


C26135

경고 C26135: 누락 된 주석 <annotation> <func> 함수에.

C26135 분석기는 함수인 잠금이 있는 잠금 래퍼 함수를 유추 하는 경우에 발생 경고 취득 하거나 릴리스 부작용을 잠급니다.코드의 래퍼 함수 아닙니다 경우 (잠금 획득 중인 경우)가 잠금을 누수 되 또는 (잠금 릴리스되는 경우)가 올바르게 릴리스되지 않습니다.

예제

다음 예제에서는 주석을 적절 한 부작용이 없기 때문에 C26135 경고를 생성 합니다.

    typedef struct _DATA 
    {
        CRITICAL_SECTION cs;
    } DATA;

    void MyEnter(DATA* p) 
    {
        // Warning C26135:
        // Missing side effect annotation _Acquires_lock_(&p->cs)
        EnterCriticalSection(&p->cs);
    }

    void MyLeave(DATA* p) 
    {
        // warning C26135:
        // Missing side effect annotation _Releases_lock_(&p->cs)
        LeaveCriticalSection(&p->cs);
    }

경고 C26135 또한 조건부 잠금 부작용이 감지 될 때 발생 합니다.조건부에 효과 사용 하는 _When_(ConditionExpr, LockAnnotation) 주석, 위치 LockAnnotation 하나 _Acquires_lock_ 또는 _Releases_lock_ 및 조건자 ConditionExpr 부울 조건식입니다.다른 동일한 함수에 대 한 주석의 부작용만 발생할 때 ConditionExpr true로 평가 합니다.때문에 ConditionExpr 조건을 다시 호출자에 게, 호출 컨텍스트를 인식 하는 변수를 포함 해야 릴레이를 사용 합니다.함수 매개 변수, 전역 또는 클래스 멤버 변수 또는 반환 값을 포함 합니다.반환 값을 특별 한 키워드를 주석으로 사용을 볼 수 return, 다음과 같이 합니다.

    typedef struct _DATA 
    {
        CRITICAL_SECTION cs; 
        int state;
   } DATA;

    _When_(return != 0, _Acquires_lock_(p->cs))
    int TryEnter(DATA* p) 
    {
        if (p->state != 0) 
        {
            EnterCriticalSection(&p->cs);
            return p->state;
        }

        return 0;
    }

라고도 하는 판독기/기록기 잠금은 공유/단독 잠금에 대 한 다음 주석을 사용 하 여 잠금 의도 표현할 수 있습니다.

  • _Acquires_shared_lock_(LockExpr)

  • _Releases_shared_lock_(LockExpr)

  • _Acquires_exclusive_lock_(LockExpr)

  • _Releases_exclusive_lock_(LockExpr)