C26111

警告 C26111: 调用方无法解除锁定 <lock> 在之前调用 <func> 函数。

批注_Requires_lock_not_held_规定指定的锁的锁计数不能大于零时调用该函数时的前提条件。 函数无法释放锁之前,它调用另一个函数时,会发出警告 C26111。

示例

下面的示例生成警告 C26111,因为_Requires_lock_not_held_前提条件违反的调用DoNotLock中的锁定部分。

typedef struct _DATA 
{
    CRITICAL_SECTION cs;
    int d;
} DATA;

_Requires_lock_not_held_(p->cs) 

void DoNotLock(DATA* p)
{
    EnterCriticalSection(&p->cs); 
    p->d = 0;
    LeaveCriticalSection(&p->cs);
}

void LockedFunction(DATA* p) 
{ 
    EnterCriticalSection(&p->cs); 
    DoNotLock(p); // Warning C26111
    LeaveCriticalSection(&p->cs);
}