C26116

警告 C26116:未能获取或持有锁 <lock> in <func>.

语法范围的强制 获取 锁和 发布 锁对在 C/C++ 程序语言中不会执行。函数通过对并发状态做一个可观察的修改可能会介绍一个锁的副作用。例如,对于给定的锁,锁包装函数增加了锁获取的数量或锁计数。您可以通过使用 _Acquires_lock_ 或 _Requires_lock_held 来注释由于锁获取或锁释放而产生副作用的函数。如果没有此类批注,函数在返回之后,期望不更改任何锁计数。如果获取并释放不平衡,它们被认为是 孤儿(orphaned)。发出 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