C26117
警告 C26117: 関数 <func>の unheld のロックの解放 <lock>。
構文上、スコープ ロックの実装では、言語に応じて C/C++ プログラムの リリースの ペアを実行 し、 ロックします。関数は、同時実行の状態への観測可能な変更によってロックの副作用が生じることがあります。たとえば、ロックのラッパー関数はロックの取得と解放は、Resource Acquisition Is コンストラクターの組み合わせ Application Programming Interface の数、または特定のロックのロック カウントをインクリメントします。ロックの副作用が _Acquires_lock_ か _Releases_lock_を使用してリリースを取得またはロックするのを果たす関数をそれぞれ付けます。このような注釈を指定せずにロック カウントを変更せずに戻ると、関数が想定されます。派生し、リリースが分散いない場合、孤立になっていると見なされます。警告 C26117 は _Releases_lock_ が指定されていない関数は、解放される前に関数がロックを所有する必要があるため、ロックを解放した場合に発生します。
使用例
次の例では、関数 ReleaseUnheldLock が flag の保留状態の必ずしもあるあいまいとように指定する注釈がないロックを解放するため C26117 警告が生成されます。
typedef struct _DATA
{
CRITICAL_SECTION cs;
} DATA;
int flag;
void ReleaseUnheldLock(DATA* p)
{
if (flag)
EnterCriticalSection(&p->cs);
// code ...
LeaveCriticalSection(&p->cs);
}
次のコードは、解放されたロックは、同じ状況で派生する保証して問題を解決します。
typedef struct _DATA
{
CRITICAL_SECTION cs;
} DATA;
int flag;
void ReleaseUnheldLock(DATA* p)
{
if (flag)
{
EnterCriticalSection(&p->cs);
// code ...
LeaveCriticalSection(&p->cs);
}
}