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
}