Aracılığıyla paylaş


C26130

uyarı C26130: annotation _Requires_lock_held_ (<lock>) veya _No_competing_thread_ <func> işlevi içindeki adresi eksik.Aksi takdirde bir yarış durumu olabilir.Değişken <var> kilit <lock> tarafından korunmalıdır.

Çözümleyici olası bir yarış durumu algılar, ancak işlev büyük bir olasılıkla bir tek iş parçacıklı modda, örneğin, bazı buluşsal tabanlı yöntemler üzerinde başlama aşamasında fonksiyonu olduğunda, uyarı C26130 verilir.

Örnek

Aşağıdaki örnekte, uyarı C26130 üretilir, çünkü bir _Guarded_by_ üye kilidi değiştiriliyor.

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

    void Init(DATA* p) 
    {
        p->data = 0; // Warning C26130
    }

Önceki kod tek iş parçacıklı modda işletilen garanti, _No_competing_thread_ işlevini kullanarak açıklama, aşağıdaki örnekte gösterildiği gibidir.

    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
    }

Alternatif olarak, _No_competing_thread_begin_ ve _No_competing_thread_end_ kullanılarak kod parçası ekleyebilirsiniz.

    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_
    }