次の方法で共有


警告 C26111

関数 'func' を呼び出す前に、呼び出し元がロック 'lock' を解放できない。

注釈 _Requires_lock_not_held_ は、関数が呼び出されたときに、指定されたロックのロック数を 0 より大きくできないことを前提条件とします。 警告 C26111 は、関数が別の関数を呼び出す前にロックを解除できなかった場合に発行されます。

次の例では、ロック済みのセクション内の DoNotLock の呼び出しが _Requires_lock_not_held_ 前提条件に違反するため、警告 C26111 が生成されます。

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);
}