Condividi tramite


C26130

avviso C26130: Annotazione _Requires_lock_held_ (<lock>) mancante o _No_competing_thread_ alla funzione <func>.In caso contrario potrebbe verificarsi una race condition.La variabile <var> deve essere protetta dal blocco <lock>.

L'avviso C26130 viene generato quando l'analizzatore rileva una potenziale race condition ma deduce che la funzione venga eseguita in una modalità thread singolo, ad esempio, quando la funzione è in fase di inizializzazione basata su determinate regole euristiche.

Esempio

Nell'esempio seguente, l'avviso C26130 viene generato perché un membro _Guarded_by_ viene modificato senza un blocco.

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

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

Se ci si può assicurare che il codice precedente venga utilizzato nella modalità thread singolo, annotare la funzione utilizzando _No_competing_thread_, come illustrato nell'esempio seguente.

    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
    }

In alternativa, è possibile annotare un frammento di codice utilizzando _No_competing_thread_begin_ e _No_competing_thread_end_, come segue.

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