C26116
avertissement C26116 : Échec pour acquérir ou contenir le verrou <lock> dans <func>.
La mise en place d'un verrou à portée limitée syntaxiquement obtient et verrouille libère les paires dans des applications C/C++ n'est pas effectué par le langage.Une fonction peut introduire un effet secondaire verrouillant en apportant une modification observable à l'état d'accès concurrentiel.Par exemple, une fonction de verrou englobante incrémente le nombre d'entrées de verrou, ou le nombre de verrous, pour un verrou fourni. Vous pouvez annoter une fonction qui a comme effet secondaire d'acquérir un verrou ou de le libérer à l'aide respectivement de _Acquires_lock_ et de _Requires_lock_held.Sans de telles annotations, il est prévu qu'une fonction ne modifie pas le nombre de verrous après qu'elle ait été retournée.Si l'acquisition et la libération ne sont pas équilibrées, elles sont considérées comme orphelines.L'avertissement C26116 est émis lorsqu'une fonction a été annotée avec _Acquires_lock_, mais qu'elle n'acquiert pas un verrou, ou lorsqu'une fonction est annotée avec _Requires_lock_held et libère le verrou.
Exemple
L'exemple suivant génère l'avertissement C26116 car la fonction DoesNotLock a été annotée avec _Acquires_lock_ mais ne l'acquiert pas.La fonction DoesNotHoldLock génère l'avertissement car elle est annotée avec _Requires_lock_held et ne le contient pas.
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
}