C26130C26130

Advertencia C26130: falta la anotación _requiere_bloqueo_mantiene_(<bloqueo >) o _No_compiten_subproceso_ en la función <func >.warning C26130: Missing annotation _Requires_lock_held_(<lock>) or _No_competing_thread_ at function <func>. De lo contrario, podría ser una condición de carrera.Otherwise it could be a race condition. Variable <var > debe estar protegida por bloqueo <bloqueo >.Variable <var> should be protected by lock <lock>.

Se emite la advertencia C26130 cuando el analizador detecta una condición de carrera potenciales pero deduce que la función es probable que se ejecutará en un modo sencillo, por ejemplo, cuando la función está en la fase de inicialización en función de cierta heurística.Warning C26130 is issued when the analyzer detects a potential race condition but infers that the function is likely to be run in a single threaded mode, for example, when the function is in the initialization stage based on certain heuristics.

EjemploExample

En el ejemplo siguiente, se genera la advertencia C26130 porque un _Guarded_by_ se está modificando los miembros sin un bloqueo.In the following example, warning C26130 is generated because a _Guarded_by_ member is being modified without a lock.


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

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

EjemploExample

Si el código anterior se garantiza que se trabajará en un modo sencillo, anotar la función mediante _No_competing_thread_, como se muestra en el ejemplo siguiente.If the previous code is guaranteed to be operated in a single threaded mode, annotate the function by using _No_competing_thread_, as shown in the following example.


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
}

EjemploExample

Como alternativa, puede anotar un fragmento de código mediante el uso de _No_competing_thread_begin_ y _No_competing_thread_end_, como se indica a continuación.Alternatively, you can annotate a code fragment by using _No_competing_thread_begin_ and _No_competing_thread_end_, as follows.


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