Udostępnij za pośrednictwem


C26130

Ostrzeżenie C26130: Brak adnotacji _Requires_lock_held_(<lock>) lub _No_competing_thread_ w funkcji <func>.W przeciwnym razie może to być sytuacja wyścigu.Zmienna <var> powinna być chroniona przez blokadę <lock>.

Ostrzeżenie C26130 jest wydawane, gdy analizator wykryje potencjalną sytuację wyścigu, ale wywnioskuje, że funkcja jest prawdopodobnie uruchomiona w trybie pojedynczego wątku, na przykład, gdy funkcja, w oparciu o pewne heurystyki, jest na etapie inicjowania.

Przykład

W poniższym przykładzie, ostrzeżenie C26130 zostało wygenerowane, ponieważ element członkowski _Guarded_by_ jest modyfikowany bez blokady.

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

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

Jeśli działanie powyższego kodu jest zagwarantowane w trybie pojedynczego wątku, oznacz funkcję adnotacją, za pomocą _No_competing_thread_, w sposób pokazany w poniższym przykładzie.

    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
    }

Alternatywnie, możesz dodać adnotację do fragmentu kodu za pomocą _No_competing_thread_begin_ i _No_competing_thread_end_, w następujący sposób.

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