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