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
}