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