Compartilhar via


C26130

Aviso C26130: anotação _Requires_lock_held_ (<lock>) ou _No_competing_thread_ na função <func> ausente.Caso contrário, pode ser uma condição de corrida.Variável <var>. devem ser protegidos por bloqueio <lock>.

C26130 de aviso é emitido quando o analisador detecta uma condição de corrida potencial mas infere que a função é a probabilidade de ser executado em um modo de segmento único, por exemplo, quando a função é no estágio de inicialização com base em determinados heurística.

Exemplo

No exemplo a seguir, o C26130 de aviso é gerado porque um _Guarded_by_ membro está sendo modificado sem um bloqueio.

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

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

Se o código anterior é garantido para ser operado em um modo de segmento único, anotar a função usando _No_competing_thread_, conforme mostrado no exemplo a seguir.

    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, você poderá anotar um fragmento de código por meio de _No_competing_thread_begin_ e _No_competing_thread_end_, da seguinte forma.

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