C26116
C26116 警告: 取得または <lock> のロックを保持するために失敗 <func>。
構文のスコープのロックの強制取得 とロック リリースペアで C または C++ プログラム言語によっては実行されません。関数は、目に見える変更同時実行状態にすることでロックの副作用を引き起こす可能性があります。たとえば、ロックのラッパー関数数のロックの取得、または指定されたロックのロック カウントをインクリメントします。取得またはロックのリリースを使用して副作用ロックからを持つ関数を付けることができます_Acquires_lock_または_Requires_lock_heldにそれぞれ。このようなアノテーションには、関数が返された後、ロック カウントを変更しない必要があります。場合は取得してリリースされていない分散があると見なされます孤立した。関数に注釈を付けている場合、警告 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
}