Partilhar via


C26116

Aviso C26116: falha para adquirir ou manter bloqueio <lock> em <func>.

Imposição de bloqueio sintaticamente escopo adquirir e lock release pares em programas C/C++ não é executada pelo idioma.Uma função pode apresentar um efeito colateral bloqueio fazendo uma modificação observável o estado de simultaneidade.Por exemplo, uma função de invólucro lock incrementa o número de aquisições de bloqueio ou contagem de bloqueio de um determinado bloqueio.Você pode anotar uma função que tem um efeito colateral de um bloqueio de adquirir ou bloquear o lançamento usando _Acquires_lock_ ou _Requires_lock_held, respectivamente.Sem tais anotações, uma função é esperada para não alterar qualquer contagem de bloqueio após ele retorna.Se adquire e versões não são balanceados, são considerados como órfãos.C26116 de aviso é emitido quando uma função foram anotada com _Acquires_lock_, mas não adquirir um bloqueio ou uma função é anotada com _Requires_lock_held e libera o bloqueio.

Exemplo

O exemplo a seguir gera aviso C26116 porque a função DoesNotLock foi anotado com _Acquires_lock_ , mas não adquirir.A função DoesNotHoldLock gera o aviso porque é anotado com _Requires_lock_held e não o segure.

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
}

Consulte também

Referência

C26115