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
}