Aracılığıyla paylaş


C26100

uyarı C26100: Yarış durumu.Değişken <var> kilit <lock> tarafından korunmalıdır.

Bu _Guarded_by_ ek açıklaması kod içinde paylaşılan bir değişkeni korumak için kullanacağı kilidi belirtir.uyarı C26100 koruma sözleşmesi ihlal edildiğinde üretilir.

Örnek

Uyarı C26100 aşağıdaki örnekte _Guarded_by_ sözleşmesinin bir ihlali olduğu için üretilir.

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); 
}

İşlev Unsafe içinde yanlış bir kilit kullanıldığı için sözleşme ihlali oluşur.Bu durumda, gCS kullanmak için doğru kilittir.

Zaman zaman paylaşılan bir değişken okuma erişimi için değil yalnızca yazma erişimi için korunmak zorundadır.Bu durumda, _Write_guarded_by_ ek açıklamasını aşağıdaki örnekte gösterildiği gibi kullanın.

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); 
} 

İşlev Unsafe2 içinde yanlış bir kilit kullandığı için, bu örnek ayrıca uyarı C26100'ü üretir.