Partager via


C26130

avertissement C26130 : Les annotations manquantes à la fonction _Requires_lock_held_ (<lock>) ou _No_competing_thread_ <func>.Dans le cas contraire, il peut être une condition de concurrence.La variable <var> doit être protégé par le verrou <lock>.

L'aavertissement C26130 est émis lorsque l'analyseur détecte une condition de concurrence potentielle mais déduit que la fonction est susceptible d'être exécutée dans le mode thread unique, par exemple, lorsque la fonction est dans l'étape d'initialisation basé sur certaines méthodes heuristiques.

Exemple

Dans l'exemple suivant, l'avertissement C26130 est généré parce qu'un membre _Guarded_by_ est modifié sans verrou.

    typedef struct _DATA 
    {
        CRITICAL_SECTION cs;
        _Guarded_by_(cs) int data;
    } DATA;

    void Init(DATA* p) 
    {
        p->data = 0; // Warning C26130
    }

Si le code précédent est garanti d'être opéré dans un processus unique, annotez la fonction à l'aide de _No_competing_thread_, comme indiqué dans l'exemple suivant.

    typedef struct _DATA 
    {
        CRITICAL_SECTION cs;
        _Guarded_by_(cs) int data;
    } DATA;

    _No_competing_thread_ void Init(DATA* p) 
    {
        p->data = 0; // Warning C26130 will be resolved
    }

Sinon, vous pouvez annoter un fragment de code à l'aide de _No_competing_thread_begin_ et de _No_competing_thread_end_, comme suit.

    typedef struct _DATA 
    {
        CRITICAL_SECTION cs;
        _Guarded_by_(cs) int data;
    } DATA;

    void Init(DATA* p) 
    {
        _No_competing_thread_begin_
        p->data = 0; // Warning C26130 will be resolved
        _No_competing_thread_end_
    }