C26116C26116

avertissement C26116 : échec d’acquisition ou du maintien du verrou <verrou > dans <func >.warning C26116: Failing to acquire or to hold lock <lock> in <func>.

Mise en œuvre de verrou d’étendue syntaxiquement acquérir et verrou release paires dans les programmes C/C++ n’est pas effectuée par le langage.Enforcement of syntactically scoped lock acquire and lock release pairs in C/C++ programs is not performed by the language. Une fonction peut introduire un effet secondaire de verrouillage en apportant une modification observable à l’état d’accès concurrentiel.A function may introduce a locking side effect by making an observable modification to the concurrency state. Par exemple, une fonction de wrapper de verrou incrémente le nombre d’acquisitions de verrou, ou nombre de verrous, de verrou donné. Vous pouvez annoter une fonction qui a un effet secondaire à partir d’un verrou acquérir ou verrouiller la version à l’aide de _Acquires_lock_ ou _Requires_lock_held, respectivement.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. Sans ces annotations, une fonction est censée ne pas modifier n’importe quel nombre de verrous après avoir retourné.Without such annotations, a function is expected not to change any lock count after it returns. Si acquiert et libère n’est pas équilibrés, elles sont considérées comme orphelins.If acquires and releases are not balanced, they are considered to be orphaned. C26116 d’avertissement est émis lorsqu’une fonction a été annotée avec _Acquires_lock_, mais il n’acquiert pas un verrou, ou lorsqu’une fonction est annotée avec _Requires_lock_held et libère le verrou.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.

ExempleExample

L’exemple suivant génère l’avertissement C26116, car la fonction DoesNotLock a été annotée avec _Acquires_lock_ mais n’est ne pas acquis.The following example generates warning C26116 because the function DoesNotLock was annotated with _Acquires_lock_ but does not acquire it. La fonction DoesNotHoldLock génère l’avertissement, car il est annoté avec _Requires_lock_held ne pas celle-ci et maintenez-la enfoncée.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
}

Voir aussiSee Also

C26115C26115