警告 C26115

未能释放函数“func”中的锁“lock”。

在 C/C++ 程序中,语法范围的锁获取和锁释放对的强制执行不由编程语言来执行。 通过对并发状态进行显著的修改,函数可能会造成锁定副作用。 例如,锁包装器函数会增加给定锁的锁获取数或锁计数。

通过分别使用 _Acquires_lock__Releases_lock_,可批注由于锁获取或锁释放而产生副作用的函数。 如果没有此类批注,函数在返回之后,预计不会更改任何锁计数。 如果获取和释放不平衡,就会将其视为孤立的。 当函数引入孤立锁时,将发出警告 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);
}