Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Não conseguir adquirir ou manter o bloqueio em 'func'.
A imposição de pares de bloqueio bloqueio e desbloqueio com escopo sintático em programas C/C++ não é realizada pela linguagem. Uma função pode introduzir um efeito colateral de bloqueio fazendo uma modificação observável no estado de simultaneidade. Por exemplo, uma função envoltória de bloqueio incrementa o número de aquisições de bloqueio, ou contagem de bloqueio, para um bloqueio específico. Você pode anotar uma função que tenha um efeito colateral de uma aquisição ou liberação de bloqueio usando ou , respectivamente. Sem essas anotações, espera-se que uma função não modifique a contagem de bloqueios depois que ela retorna. Se as aquisições e lançamentos não estiverem equilibrados, são considerados órfãos. Aviso C26116 é emitido quando uma função foi anotada com , mas não adquire um bloqueio, ou quando uma função é anotada com e liberta o bloqueio.
Example
O exemplo seguinte gera o aviso C26116 porque a função foi anotada com mas não a obteve. A função gera o aviso porque está anotado com 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
- C26115