Compartilhar via


C26116

aviso C26116: Falha ao adquirir ou mantendo o bloqueio <lock> em <func>.

A imposição de bloqueio sintaticamente o escopo do adquire e os pares de versão de bloqueio em programas C/C++ não são executados pelo idioma.Uma função pode enviar um efeito colateral de bloqueio fazendo uma alteração perceptível ao estado de simultaneidade.Por exemplo, uma função de wrapper de bloqueio incrementa o número de aquisições de bloqueio, ou a contagem de bloqueio, para um bloqueio fornecido. É possível anotar uma função que tem um efeito colateral de adquirir um bloqueio ou bloquear a versão usando _Acquires_lock_ ou _Requires_lock_held, respectivamente.Sem essas anotações, uma função é esperada não altere nenhuma contagem de bloqueio depois que ele retorna.Se o adquire e as versões não são equilibradas, será considerada órfãos.C26116 de aviso é emitido quando uma função foi anotadas com _Acquires_lock_, mas não adquire um bloqueio, ou quando uma função é anotadas com _Requires_lock_held e libera o bloqueio.

Exemplo

O exemplo a seguir gerenciar C26116 de aviso como a função DoesNotLock foi anotadas com _Acquires_lock_ mas não o adquire.A função DoesNotHoldLock gerencia o aviso porque é anotadas com _Requires_lock_held e não o mantém.

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