Поделиться через


C26130

предупреждение C26130: Отсутствует аннотация _Requires_lock_held_(<lock>) или _No_competing_thread_ для функции <func>.В противном случае возможно состояние гонки.Переменная <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_
    }