Freigeben über


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
}

Siehe auch