Udostępnij za pośrednictwem


Ostrzeżenie C26115

Nie można zwolnić blokady "lock" w funkcji "func".

Wymuszanie syntaktycznie zakresu nabycia i blokady par zwalniania w programach C/C++ nie jest wykonywane przez język. Funkcja może wprowadzić efekt uboczny blokowania, wprowadzając zauważalną modyfikację stanu współbieżności. Na przykład funkcja otoki blokady zwiększa liczbę przejęć blokad lub liczbę blokad dla danej blokady.

Możesz dodać adnotację do funkcji, która ma efekt uboczny z blokady uzyskiwania lub zwalniania blokady przy użyciu _Acquires_lock_ lub _Releases_lock_, odpowiednio. Bez takich adnotacji funkcja nie powinna zmieniać liczby blokad po jej powrocie. Jeśli pozyskiwanie i wydania nie są zrównoważone, są uważane za oddzielone. Ostrzeżenie C26115 jest wystawiane, gdy funkcja wprowadza oddzieloną blokadę.

Przykład

Poniższy przykład generuje ostrzeżenie C26115, ponieważ istnieje oddzielona blokada w funkcji, która nie jest oznaczona adnotacją ._Acquires_lock_

typedef struct _DATA
{
    CRITICAL_SECTION cs;
} DATA;

void FailToReleaseLock(int flag, DATA* p)
{
    EnterCriticalSection(&p->cs);

    if (flag)
        return; // Warning C26115

    LeaveCriticalSection(&p->cs);
}