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);
}