C26116C26116

Advertencia C26116: errores adquirir o mantener bloqueo <bloqueo > en <func >.warning C26116: Failing to acquire or to hold lock <lock> in <func>.

Cumplimiento de bloqueo con ámbito sintácticamente adquirir y bloqueo versión pares en programas de C/C ++ no se realiza mediante el lenguaje.Enforcement of syntactically scoped lock acquire and lock release pairs in C/C++ programs is not performed by the language. Una función, puede producirse un efecto secundario bloqueo mediante la realización de una modificación perceptible en el estado de la simultaneidad.A function may introduce a locking side effect by making an observable modification to the concurrency state. Por ejemplo, una función contenedora con bloqueo incrementa el número de adquisiciones de bloqueos o recuento de bloqueos, un bloqueo determinado. Puede anotar una función que tiene un efecto secundario de un bloqueo de adquirir o bloquear versión mediante el uso de _Acquires_lock_ o _Requires_lock_held, respectivamente.For example, a lock wrapper function increments the number of lock acquisitions, or lock count, for a given lock.You can annotate a function that has a side effect from a lock acquire or lock release by using _Acquires_lock_ or _Requires_lock_held, respectively. Sin este tipo de anotaciones, se espera que una función no cambie cualquier número de bloqueo tras devolver.Without such annotations, a function is expected not to change any lock count after it returns. Si adquiere y las versiones no están equilibradas, se consideran huérfanos.If acquires and releases are not balanced, they are considered to be orphaned. C26116 de advertencia se emite cuando una función ha sido anotada con _Acquires_lock_, pero no adquiere un bloqueo, o si una función está anotada con _Requires_lock_held y libera el bloqueo.Warning C26116 is issued when a function has been annotated with _Acquires_lock_, but it does not acquire a lock, or when a function is annotated with _Requires_lock_held and releases the lock.

EjemploExample

En el ejemplo siguiente genera la advertencia C26116 porque la función DoesNotLock se anota con _Acquires_lock_ , pero no lo adquirió.The following example generates warning C26116 because the function DoesNotLock was annotated with _Acquires_lock_ but does not acquire it. La función DoesNotHoldLock genera la advertencia porque se anota con _Requires_lock_held y no la tiene.The function DoesNotHoldLock generates the warning because it is annotated with _Requires_lock_held and does not hold it.


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énSee Also

C26115C26115