C26130
警告 C26130:缺少批注 _Requires_lock_held_(<lock>) 或 _No_competing_thread_(在函数 <func> 处)。否则它可能是争用条件。变量 <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_
}