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