# V3079. The 'ThreadStatic' attribute is applied to a non-static 'A' field and will be ignored.

Анализатор обнаружил подозрительное объявление нестатического поля, к которому применяется атрибут 'ThreadStatic'.

Применение данного атрибута к статическому полю позволяет устанавливать индивидуальное значение этого поля для каждого потока. К тому же это запрещает совместное использование данного поля в разных потоках, что исключает возможность блокировок при обращении к полю. Однако при применении данного атрибута к нестатическому полю, атрибут будет проигнорирован.

Рассмотрим пример:

    [ThreadStatic]
    bool m_knownThread;

Скорее всего данное поле является флагом, который должен иметь своё значение для каждого потока. Но так как поле не является статическим, применение данного атрибута не имеет смысла. Если все же логика работы программы основывается на факте, что значение поля должно быть уникальным для каждого потока (исходя из названия и наличия атрибута 'ThreadStatic'), возможна ошибка.

Для исправления ошибки необходимо добавить модификатор 'static' к объявлению поля:

    [ThreadStatic]
    static bool m_knownThread;

Дополнительная информация:

- ThreadStaticAttribute Class.

Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки при работе с многопоточными примитивами (интерфейсами запуска потоков на выполнение, синхронизации и обмена данными между потоками и пр.).

Данная диагностика классифицируется как:

CWE-821

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V3079.