Freigeben über


C26130

Warnung C26130: Fehlendes Anmerkung _Requires_lock_held_ ( <lock> ) oder _No_competing_thread_ an der Funktion <func> .Andernfalls kann es sich um eine Racebedingung sein.Variable <var> sollte durch Sperren <lock> geschützt sind.

Das C26130 Warnung wird ausgegeben, wenn der Analyzer eine mögliche Racebedingung erkennen ableitet, aber wahrscheinlich ist, dass die Funktion, in einen Singlethreaden Modus ausgeführt werden sollen, z. B. wenn die Funktion in der Initialisierungsphase auf bestimmte Heuristik ist.

Beispiel

Im folgenden Beispiel wird C26130 Warnung generiert, da ein _Guarded_by_-Member ohne eine Sperre geändert wird.

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

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

Wenn der vorhergehende Code auf jeden Fall in einem Singlethreaden Modus behandelt werden soll, kommentieren Sie die Funktion _No_competing_thread_, indem Sie, wie im folgenden Beispiel gezeigt.

    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
    }

Alternativ können Sie ein Codefragment gestalten, indem Sie _No_competing_thread_begin_ und _No_competing_thread_end_wie folgt verwenden.

    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_
    }