C26117C26117

avertissement C26117 : libération d’un verrou non maintenu <verrou > dans la fonction <func >.warning C26117: Releasing unheld lock <lock> in function <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 _Releases_lock_, 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 _Releases_lock_, 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. C26117 d’avertissement est émis lorsqu’une fonction qui n’a pas été annotée avec _Releases_lock_ libère un verrou qu’il ne contient pas, car la fonction doit posséder le verrou avant qu’il le relâche.Warning C26117 is issued when a function that has not been annotated with _Releases_lock_ releases a lock that it doesn't hold, because the function must own the lock before it releases it.

ExempleExample

L’exemple suivant génère l’avertissement C26117, car la fonction ReleaseUnheldLock libère un verrou qu’il ne contient pas nécessairement : l’état de flag est ambigu : et il n’existe aucune annotation qui spécifie qu’il le devrait.The following example generates warning C26117 because the function ReleaseUnheldLock releases a lock that it doesn't necessarily hold—the state of flag is ambiguous—and there is no annotation that specifies that it should.


typedef struct _DATA   
{  
    CRITICAL_SECTION cs;  
} DATA;  

int flag;  

void ReleaseUnheldLock(DATA* p)  
{  
    if (flag)  
        EnterCriticalSection(&p->cs);  
    // code ...  
    LeaveCriticalSection(&p->cs);  
}  

ExempleExample

Le code suivant corrige le problème en garantissant que le verrou libéré est également acquis dans les mêmes conditions.The following code fixes the problem by guaranteeing that the released lock is also acquired under the same conditions.


typedef struct _DATA   
{  
    CRITICAL_SECTION cs;  
} DATA;  

int flag;  

void ReleaseUnheldLock(DATA* p)  
{  
    if (flag)  
    {  
        EnterCriticalSection(&p->cs);  
        // code ...  
        LeaveCriticalSection(&p->cs);  
    }  
}  

Voir aussiSee Also

C26115C26115