Sdílet prostřednictvím


C26116

upozornění C26116: nedaří se získat nebo udržet zámek <zámek> ve funkci <funkce>.

Vynucení syntakticky vymezených párů zámků acquire a release v programech jazyka C/C++ není prováděno jazykem.Funkce může zavést vedlejší účinek uzamčení provedením pozorovatelné úpravy stavu souběžnosti.Například funkce pro obalení zámku zvyšuje počet získání zámku, tj. počet zámků, pro daný zámek. Lze přidat poznámku k funkci, která má vedlejší účinek z operací lock acquire nebo lock release, použitím klíčových slov _Acquires_lock_, resp. _Requires_lock_held.Bez těchto poznámek se od funkce očekává, že po dokončení neprovede žádnou změnu počtu zámků.Nejsou-li operace acquire a release v rovnováze, jsou považovány za osamocené.K upozornění C26116 dojde, má-li funkce poznámku _Acquires_lock_, ale nezískává zámek, nebo má-li poznámku _Requires_lock_held a uvolňuje zámek.

Příklad

Následující příklad generuje upozornění C26116, protože funkce DoesNotLock byla označena poznámkou _Acquires_lock_, ale zámek nezískává.Funkce DoesNotHoldLock generuje upozornění, protože je označena poznámkou _Requires_lock_held, ale zámek neudržuje.

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
}

Viz také

Referenční dokumentace

C26115