Aracılığıyla paylaş


C26116

uyarı C26116: <func> içinde <lock> kilit tutmak veya almak başarısız.

Sözdizimsel olarak kapsamlı kilit zorlama Al ve kilit serbest çiftleri c/C++ programlarında dil tarafından gerçekleştirilmez.Bir işlev eşzamanlılık durumuna gözle görülür bir değişiklik yaparak bir kilitleme yan etkisine neden olabilir.Örneğin, bir kilit sarıcı işlevine kilit alımlarını veya kilit sayısını, verilen kilit için artırır.Bir kilit alımından veya kilit bırakılmasından gelen bir yan etkisine sahip bir işleve sırasıyla _Acquires_lock_ veya _Requires_lock_held ek açıklama getirebilirsiniz.Bu tür ek açıklamalar olmadan, döndürüldükten sonra bir işlevin herhangi bir kilit sayısını değiştirmemesi beklenir.Alma ve serbest bırakmalar dengeli değil ise, artık olarak düşünülür.Uyarı C26116 bir işleve _Acquires_lock_ ile birlikte ek açıklama getirilirse, ama bir kilit almazsa veya bir işleve _Requires_lock_held ile ek açıklama getirilirse ve kilidi kaldırırsa ilişkilendirilir.

Örnek

Aşağıdaki örnek uyarı C26116'yı oluşturur çünkü oluşturur işlev DoesNotLock_Acquires_lock_ ile açıklama getirilir ama onu elde etmez.İşlev DoesNotHoldLock uyarıyı oluşturur çünkü _Requires_lock_held ile açıklama getirilir ve onu tutmaz.

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
}

Ayrıca bkz.

Başvuru

C26115