Compartilhar via


C26130

Aviso C26130: Anotação ausente _Requires_lock_held_(<lock>) ou _No_competing_thread_ na função <func>.Caso contrário, isso poderia ser uma condição de corrida.A variável <var> deve ser protegida pelo bloqueio <lock>.

C26130 de aviso é emitido quando o analisador detectar uma condição de corrida potenciais mas infere que a função é provável que seja executada em um modo de thread único, por exemplo, quando a função é a fase de inicialização baseada em determinadas heurística.

Exemplo

No exemplo a seguir, C26130 de aviso é gerado como um membro de _Guarded_by_ está sendo alterado 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 tem a garantia de ser operado em um modo de thread único, anote 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, é possível anotar um fragmento de código usando _No_competing_thread_begin_ e _No_competing_thread_end_, como a seguir.

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