警告 C26116
'func' でロック 'lock' を取得または保持できない。
C/C++ プログラムでの構文スコープ のロック 取得 とロック 解放 のペアの適用は、言語によって実行されません。 関数は、コンカレンシー状態を監視可能な方法で変更することにより、ロックの副作用が発生することがあります。 たとえば、ロックのラッパー関数により、特定のロックに関するロック取得数 (ロック数) が増えます。 _Acquires_lock_
を使用してロックの取得による副作用がある関数に注釈を付けたり、_Requires_lock_held
を使用してロックの解放による副作用がある関数に注釈を付けたりできます。 このような注釈がない場合、返されたロック数が関数によって変更されないようにする必要があります。 取得とリリースのバランスが取れていない場合、それらは孤立していると見な されます。 警告 C26116 は、関数に注釈が付けられた _Acquires_lock_
がロックが取得されない場合、または関数に注釈が付 _Requires_lock_held
けられたりロックが解除されたりしたときに発行されます。
例
次の例では、関数 DoesNotLock
に注釈が付けられたが取得されていないため、警告 C26116 が生成されます _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
}
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示