Warnung C26116
Fehler beim Abrufen oder Sperren von "Lock" in "func".
Die Erzwingung syntaktisch beschränkter Sperrsperren, die Veröffentlichungspaare in C/C++-Programmen abrufen und sperren, wird von der Sprache nicht ausgeführt. Eine Funktion kann einen Sperr-Nebeneffekt verursachen, indem eine feststellbare Änderung am Parallelitätszustand vorgenommen wird. Beispielsweise erhöht eine Sperrwrapperfunktion die Anzahl der Sperreskäufe oder die Anzahl der Sperren für eine bestimmte Sperre. Sie können eine Funktion kommentieren, die einen Nebeneffekt von einer Sperre hat, indem Sie die Sperre abrufen _Acquires_lock_
oder freigeben._Requires_lock_held
Ohne solche Anmerkungen wird erwartet, dass eine Funktion nach der Rückgabe keine Sperranzahl mehr ändert. Wenn Erwerbe und Veröffentlichungen nicht ausgeglichen sind, gelten sie als verwaist. Warnung C26116 wird ausgegeben, wenn eine Funktion mit Anmerkungen versehen _Acquires_lock_
wurde, aber keine Sperre erhält oder wenn eine Funktion mit _Requires_lock_held
Anmerkungen versehen ist und die Sperre loslässt.
Beispiel
Im folgenden Beispiel wird die Warnung C26116 generiert, da die Funktion DoesNotLock
mit Anmerkungen versehen _Acquires_lock_
wurde, sie aber nicht erhält. Die Funktion DoesNotHoldLock
generiert die Warnung, da sie mit Anmerkungen versehen _Requires_lock_held
ist und sie nicht enthält.
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
}