C26130
警告 C26130: 必要なコメントの _Requires_lock_held_ (<lock>) または関数 <func> の _No_competing_thread_。それ以外の場合は競合状態にすることができます。変数は <var> ロック <lock> で保護する必要があります。
警告 C26130 は関数が特定のヒューリスティックに基づいて初期化段階にある場合はアナライザーが潜在的な競合状態を検出しますが関数問題があるシングル スレッド モードで実行されている場合たとえばのように推論ことも考えられます。
使用例
次の例では警告 C26130 は _Guarded_by_ のメンバーがロックしないで変更されたときに生成されます。
typedef struct _DATA
{
CRITICAL_SECTION cs;
_Guarded_by_(cs) int data;
} DATA;
void Init(DATA* p)
{
p->data = 0; // Warning C26130
}
前のコードでは一つのスレッド モードで動作することが保証されます。次の例に示すように _No_competing_thread_ を使用して関数を指定します。
typedef struct _DATA
{
CRITICAL_SECTION cs;
_Guarded_by_(cs) int data;
} DATA;
_No_competing_thread_ void Init(DATA* p)
{
p->data = 0; // Warning C26130 will be resolved
}
また_No_competing_thread_begin_ と _No_competing_thread_end_ を使用すると次のようにコードを指定できます。
typedef struct _DATA
{
CRITICAL_SECTION cs;
_Guarded_by_(cs) int data;
} DATA;
void Init(DATA* p)
{
_No_competing_thread_begin_
p->data = 0; // Warning C26130 will be resolved
_No_competing_thread_end_
}