Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Uvolnění nezadržovaného zámku "lock" ve funkci "func".
Poznámky
Vynucení syntakticky vymezených párů uzamčení a uvolnění zámků v programech C/C++ jazyk neprovádí. Funkce může zavést zamykání vedlejší účinek tím, že provede pozorovatelnou změnu stavu souběžnosti. Například funkce zamykací obálky zvýší počet pořízení zámků nebo počet zámků pro daný zámek. Funkci, která má vedlejší účinek, můžete opatřením zámku opatřením nebo uvolněním _Acquires_lock_ pomocí nebo _Releases_lock_nebo . Bez těchto poznámek se očekává, že funkce po vrácení nezmění žádný počet zámků. Pokud získání a vydání nejsou vyvážená, považují se za osamocené. Upozornění C26117 se vydává, když funkce, která nebyla opatřena poznámkami, _Releases_lock_ uvolní zámek, který se neudrží, protože funkce musí zámek vlastnit předtím, než ji uvolní.
Příklady
Následující příklad vygeneruje upozornění C26117, protože funkce ReleaseUnheldLock uvolní zámek, který nemusí nutně obsahovat – stav flag je nejednoznačný – a neexistuje žádná poznámka, která určuje, že by měla.
typedef struct _DATA
{
CRITICAL_SECTION cs;
} DATA;
int flag;
void ReleaseUnheldLock(DATA* p)
{
if (flag)
EnterCriticalSection(&p->cs);
// code ...
LeaveCriticalSection(&p->cs);
}
Následující kód vyřeší problém tím, že zaručuje, že uvolněný zámek je také získán za stejných podmínek.
typedef struct _DATA
{
CRITICAL_SECTION cs;
} DATA;
int flag;
void ReleaseUnheldLock(DATA* p)
{
if (flag)
{
EnterCriticalSection(&p->cs);
// code ...
LeaveCriticalSection(&p->cs);
}
}