Compartir a través de


C26116

advertencia C26116: Error al adquirir o contener el bloqueo <lock> en <func>.

El ámbito de cumplimiento de bloqueo sintáctico adquirir y bloquear liberar en pares en programas de C/C++ no lo realiza el lenguaje.Una función puede producir un efecto secundario de bloqueo creando una modificación observable al estado de simultaneidad.Por ejemplo, una función contenedora de bloqueo aumenta el número de adquisiciones de bloqueo, o el recuento de bloqueo, para un bloqueo determinado. Se puede anotar una función que tenga un efecto secundario de un bloqueo adquirido o un bloqueo liberado mediante _Acquires_lock_ o _Requires_lock_held, respectivamente.Sin estas anotaciones, se espera que una función no cambie ningún recuento de bloqueos después de que retorne.Si adquirir y liberar no están equilibrados, se consideran huérfanos.Se emite la advertencia C26116 cuando una función se ha anotado con _Acquires_lock_, pero no adquiere un bloqueo, o cuando una función se anota con _Requires_lock_held y libera el bloqueo.

Ejemplo

El siguiente ejemplo genera la advertencia C26116 porque la función DoesNotLock fue anotada con _Acquires_lock_ pero no lo adquiere.La función DoesNotHoldLock genera la advertencia porque se anota con _Requires_lock_held y no lo mantiene.

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
}

Vea también

Referencia

C26115