Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
A "func" függvény nem felügyelt zárolásának feloldása.
Megjegyzések
A C/C++ programokban a szintaktikai hatókörű zárolási és zárolási kiadási párok kényszerítése nem a nyelv által történik. A függvény zárolási mellékhatást okozhat azáltal, hogy megfigyelhető módosítást végez az egyidejűségi állapoton. A zár burkoló függvény például növeli egy adott zár megszerzéseinek számát, vagy zárszámot. A zárolás megszerzése vagy feloldása által okozott mellékhatással rendelkező függvényeket megjegyzésekkel láthatja el _Acquires_lock_ illetve _Releases_lock_ használatával. Ilyen megjelölések nélkül elvárt, hogy a függvény ne módosítsa a zárolások számát a visszatérés után. Ha a beszerzések és kiadások nem kiegyensúlyozottak, árvanak minősülnek. A C26117 figyelmeztetést akkor adják ki, ha egy olyan függvény, amely nincs annotálva _Releases_lock_, kienged egy zárolást, amelyet nem birtokol, mert a függvénynek rendelkeznie kell a zárolással, mielőtt kiengedné.
Példák
Az alábbi példa a C26117 figyelmeztetést generálja, mert a függvény ReleaseUnheldLock felold egy zárolást, amelyet nem feltétlenül tart vissza – az állapot flag nem egyértelmű –, és nincs olyan széljegyzet, amely jelzi, hogy kellene.
typedef struct _DATA
{
CRITICAL_SECTION cs;
} DATA;
int flag;
void ReleaseUnheldLock(DATA* p)
{
if (flag)
EnterCriticalSection(&p->cs);
// code ...
LeaveCriticalSection(&p->cs);
}
Az alábbi kód úgy oldja meg a problémát, hogy garantálja, hogy a feloldott zárolást is ugyanazokkal a feltételekkel szerezték be.
typedef struct _DATA
{
CRITICAL_SECTION cs;
} DATA;
int flag;
void ReleaseUnheldLock(DATA* p)
{
if (flag)
{
EnterCriticalSection(&p->cs);
// code ...
LeaveCriticalSection(&p->cs);
}
}