C26130
предупреждение C26130: Отсутствует аннотация _Requires_lock_held_(<lock>) или _No_competing_thread_ для функции <func>.В противном случае возможно состояние гонки.Переменная <var> должна быть защищена блокировкой <lock>.
Предупреждение C26130 возникает, когда анализатор определяет возможное состояние гонки, но означает, что функция будет выполняться в одиночном замкнутопотоковом режиме, например, когда функция в состоянии инициализации, основом на определенных эвристиках.
Пример
В следующем примере формируется предупреждение C26130, поскольку элемент _Guarded_by_ изменяется без блокировки.
typedef struct _DATA
{
CRITICAL_SECTION cs;
_Guarded_by_(cs) int data;
} DATA;
void Init(DATA* p)
{
p->data = 0; // Warning C26130
}
Если гарантируется, что предыдущий код выполняется в одиночном замкнутопотоковом режиме, добавьте аннотацию к функции с помощью _No_competing_thread_, как показано в следующем примере.
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
}
Кроме того, можно добавлять аннотацию к фрагменту кода с помощью _No_competing_thread_begin_ и _No_competing_thread_end_ следующим образом.
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_
}