C26130

Advertencia C26130: Falta la anotación _Requires_lock_held_(<bloqueo>) o _No_competing_thread_ en la función <función>De lo contrario, podría ser una condición de carrera.La variable <var> debe estar protegida por bloqueo <bloqueo>.

La advertencia C26130 se emite cuando el analizador detecta una condición de carrera potencial, pero se infiere que la función es probable que se ejecute en un modo de un sólo subproceso, por ejemplo, cuando la función está en la fase de inicialización basada en ciertas heurísticas.

Ejemplo

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

    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 va a trabajar en un modo de un solo subproceso, 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
    }

Alternativamente, se puede anotar un fragmento de código mediante _No_competing_thread_begin_ y _No_competing_thread_end_, como sigue.

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