C26116

警告 C26116: ロックを取得または保持できない機能> <>で <はロックされます。

構文上のスコープ ロックは適用 し、 C/C++ プログラムのロック リリース ペアは言語によって実行されません。関数は同時実行状態への観察可能な変更によってロックの副作用が生じることがあります。たとえば、ロックのラッパー関数はロックの数、または特定のロックのロック カウントをインクリメントします。ロックの副作用が _Acquires_lock_ または _Requires_lock_heldを使用してリリースを取得またはロックするのを伴う関数を個別に指定できます。このような注釈を指定せずにロック カウントを変更せずに、返された後関数が想定されます。取得し、リリースの数が一致していない場合は、デタッチされたと見なされます。警告が発行されます C26116 関数が _Requires_lock_held が指定され、ロックを解放する場合、関数が _Acquires_lock_が指定されているが、ロックは取得しません。

使用例

次の例では、関数 DoesNotLock が _Acquires_lock_ が指定され、生成し得るため、警告を C26116。_Requires_lock_held が指定され、それを保持できないため、関数 DoesNotHoldLock は警告を生成します。

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
}

参照

関連項目

C26115