Sdílet prostřednictvím


C26117

C26117 upozornění: uvolnění uzamčení unheld <lock> ve funkci <func>.

Vynucení syntakticky scoped lock získat a uzamknout vydání dvojic v C/C++ programů není prováděno v jazyce.Funkce uzamčení vedlejším účinkem zavést provedením pozorovatelné změny stavu souběžnosti.Například funkci uzamčení wrapper zvyšuje počet lock pořízení nebo počet uzamčení pro dané zámku.Můžete opatřit poznámkami funkci, která má vliv straně od zámek získání nebo uvolnění uzamčení pomocí _Acquires_lock_ nebo _Releases_lock_, resp..Bez těchto poznámek se očekává funkce neměnit libovolný počet uzamčení po vrátí.Pokud získá a vydání nejsou vyváženy, jako jsou považovány za osamocené.C26117 upozornění je vydán při funkci, která nebyla byla označena _Releases_lock_ uvolní zámek, který není pojmout, protože funkce musí vlastnit zámek, než je uvolněn.

Příklad

Následující příklad vytvoří upozornění C26117, protože funkce ReleaseUnheldLock uvolní zámek, který není nutně pojmout – stav flag je dvojznačný – a neexistuje žádné poznámky 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 řeší problém zaručením vydané zámek 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);
    }
}

Viz také

Referenční dokumentace

C26115