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