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