C26116
Warnung C26116: fehlerhafte erwerben oder Sperre <lock> in <func>.
Durchsetzung der syntaktisch gültigen Lock erwerben und Lock release -Paare in C/C++-Programme erfolgt nicht durch die Sprache.Eine Funktion kann Sperren Nebeneffekt einführen, machen Sie eine sichtbare Änderung in den Zustand der Parallelität.Eine Lock-Wrapperfunktion erhöht z. B. die Anzahl der Sperren Übernahmen oder Anzahl von Sperren für eine bestimmte Sperre.Sie können eine Funktion, eine Nebenwirkung aus eine Sperre zu erwerben oder Sperren von Release hat mithilfe, versehen _Acquires_lock_ oder _Requires_lock_heldbzw..Ohne solche Anmerkungen ist eine Funktion voraussichtlich keine Sperrenanzahl ändern, nachdem es beendet wurde.Wenn erwirbt und Versionen sind nicht ausgeglichen, sie sind als verwaiste.C26116 Warnung wird ausgegeben, wenn eine Funktion mit versehen wurde _Acquires_lock_, aber es erwirbt eine Sperre, oder wenn eine Funktion mit versehen ist _Requires_lock_held und die Sperre.
Beispiel
Im folgende Beispiel wird C26116 Warnung generiert, da die Funktion DoesNotLock versehen wurde, mit _Acquires_lock_ , aber keinen erwirbt.Die Funktion DoesNotHoldLock wird die Warnung generiert, da es mit versehen ist _Requires_lock_held und hält es nicht.
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
}