C26115

警告 C26115:未能解除锁 <lock>(在函数 <func> 中)。

语法范围的强制 获取 锁和 发布 锁对在 C/C++ 程序语言中不会执行。函数通过对并发状态做一个可观察的修改可能会介绍一个锁的副作用。例如,一个包装锁的函数对于一个给定的锁增加了锁获取的数量或锁计数。

通过使用 _Acquires_lock_ 或 _Releases_lock_ ,可注释由于锁获取或锁释放而产生副作用的函数。如果没有此类批注,函数在返回之后,期望不更改任何锁计数。如果获取并释放不平衡,它们被认为是 孤儿(orphaned)。当函数引入一个孤儿锁时,会发出 C26115 警告。

示例

下面的示例生成 C26115警告,因为未使用 _Acquires_lock_ 注释在一个函数的孤立锁上。

    typedef struct _DATA 
    {
        CRITICAL_SECTION cs;
    } DATA;

    void FailToReleaseLock(int flag, DATA* p) 
    {
        EnterCriticalSection(&p->cs); 

        if (flag)
            return; // Warning C26115

        LeaveCriticalSection(&p->cs);
    }