C26116

警告 C26116: 无法获取或持有锁 <lock> 在 <func>。

强制实施的语法指定了作用域的锁定获取 和锁定 释放 C/C++ 程序中的对该语言不执行。 函数可能会引入锁定的负面影响,从而可观察到的修改的并发性状态。 例如,锁定包装函数递增锁收购或锁计数,对于给定的锁数。您可以添加批注具有副作用锁从获得或通过使用锁定版本的函数的_Acquires_lock_或_Requires_lock_held,分别。 此类注释,而不能更改任何锁计数,它返回后应函数。 如果获取和不对称的发行版,它们都是孤立。 已与注释函数时发出警告 C26116 _Acquires_lock_,但它不会获取锁定,或使用批注函数是_Requires_lock_held并释放该锁。

示例

下面的示例生成警告 C26116,因为该函数DoesNotLock已使用批注_Acquires_lock_ ,但不是获取它。 函数DoesNotHoldLock ,因为它将批注与生成警告_Requires_lock_held并不保存它。

typedef struct _DATA 
{
    CRITICAL_SECTION cs;
} DATA;

_Acquires_lock_(p->cs) void DoesLock(DATA* p) 
{
    EnterCriticalSection(&p->cs); // OK
}

_Acquires_lock_(p->cs) void DoesNotLock(DATA* p) 
{
    // Warning C26116
}

_Requires_lock_held_(p->cs) void DoesNotHoldLock(DATA* p) 
{
    LeaveCriticalSection(&p->cs); // Warning C26116
}

请参见

参考

C26115