C26130
警告的 C26130:缺少批注函数中的 _Requires_lock_held_ (lock) 或 _No_competing_thread_ func。 否则它可以是争用条件。 应由锁 lock保护变量 var 。
警告 C26130 问题,则分析器检测到潜在的争用条件,但推断,例如,函数可以运行在单个线程模式,请将功能输入根据特定推理的初始化阶段。
示例
在下面的示例中,,因为 _Guarded_by_ 成员被修改,没有锁定,警告 C26130 生成。
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_
}