Sdílet prostřednictvím


C26130

Upozornění C26130: Chybí anotace _Requires_lock_held_ (<lock>) nebo _No_competing_thread_ funkce <func>.Jinak může dojít ke konfliktu časování.Proměnná <var> by měla být chráněna zámkem <lock>.

Upozornění C26130 je zobrazeno, pokud analyzátor zjistí možný spor, ale odvodí, že funkce bude pravděpodobně spuštěna v režimu s jedním podprocesem, například podle určitých heuristik, pokud je funkce ve fázi inicializace.

Příklad

V následujícím příkladu je upozornění C26130 vygenerováno, protože člen s klíčovým slovem _Guarded_by_ je právě upravován bez uzamčení.

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

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

Pokud je u předchozího kódu zaručeno, že bude provozován v režimu s jedním podprocesem, označte funkci pomocí anotace _No_competing_thread_, jak ukazuje následující příklad.

    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
    }

Alternativně můžete fragment kódu označit pomocí anotací _No_competing_thread_begin_ a _No_competing_thread_end_ takto.

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