Advertencia C26130

Falta la anotación _Requires_lock_held_("lock") o _No_competing_thread_ en la función "func". De lo contrario, podría ser una condición de carrera. La variable 'var' debe protegerse mediante el bloqueo 'lock'.

Advertencia C26130 se emite cuando el analizador detecta una posible condición de carrera, pero deduce que es probable que la función se ejecute en un solo modo subproceso. Por ejemplo, cuando la función está en la fase de inicialización, en función de ciertas heurística.

Ejemplos

En el ejemplo siguiente, se genera la advertencia C26130 porque se está modificando un miembro _Guarded_by_ sin un bloqueo.

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

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

Si se garantiza que el código anterior funcione en modo uniproceso, anote la función mediante _No_competing_thread_, como se muestra en el ejemplo siguiente.

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
}

Como alternativa, puede anotar un fragmento de código mediante _No_competing_thread_begin_ y _No_competing_thread_end_, como se indica a continuación.

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