다음을 통해 공유


C26100

경고 C26100: 경쟁 조건입니다.변수 <var> <lock> 잠금에 의해 보호 되어야 합니다.

_Guarded_by_ 코드에 주석 지정 잠금을 공유 변수를 보호 하는 데.경고 C26100 가드 계약을 위반 하는 경우에 생성 됩니다.

예제

위반 이므로 다음 예제 C26100 경고 생성은 _Guarded_by_ 계약.

CRITICAL_SECTION gCS; 

_Guarded_by_(gCS) int gData; 

typedef struct _DATA { 
   _Guarded_by_(cs) int data; 
   CRITICAL_SECTION cs; 
} DATA; 

void Safe(DATA* p) { 
   EnterCriticalSection(&p->cs); 
   p->data = 1; // OK 
   LeaveCriticalSection(&p->cs); 
   EnterCriticalSection(&gCS); 
   gData = 1; // OK 
   LeaveCriticalSection(&gCS); 
} 

void Unsafe(DATA* p) { 
   EnterCriticalSection(&p->cs); 
   gData = 1; // Warning C26100 (wrong lock) 
   LeaveCriticalSection(&p->cs); 
}

함수에 대 한 잘못 된 잠금을 사용 되므로 계약 위반을 발생 Unsafe.이 경우 gCS 올바른 잠금을 사용할 수 있습니다.

때때로 공유 변수 읽기 권한이 있지만 쓰기 액세스에 대 한 수만 있습니다.사용할 경우에 _Write_guarded_by_ 주석, 다음 예제에서와 같이.

CRITICAL_SECTION gCS; 

_Guarded_by_(gCS) int gData; 

typedef struct _DATA2 { 
   _Write_guarded_by_(cs) int data; 
   CRITICAL_SECTION cs; 
} DATA2; 

int Safe2(DATA2* p) { 
   // OK: read does not have to be guarded 
   int result = p->data; 
   return result; 
} 

void Unsafe2(DATA2* p) { 
   EnterCriticalSection(&gCS); 
   // Warning C26100 (write has to be guarded by p->cs) 
   p->data = 1; 
   LeaveCriticalSection(&gCS); 
} 

함수에 대 한 잘못 된 잠금을 사용 하 여 때문에이 예제에서는 C26100 경고도 생성 Unsafe2.