Top.Mail.Ru
Мы используем куки, чтобы пользоваться сайтом было удобно.
Хорошо
to the top
>
>
>
V3223. Inconsistent use of a...
menu mobile close menu
Проверка проектов
Дополнительная информация
toggle menu Оглавление

V3223. Inconsistent use of a potentially shared variable with and without a lock can lead to a data race.

29 Май 2025

Анализатор обнаружил ситуацию, в которой общий ресурс используется без блокировки, однако в другом месте этот ресурс используется с блокировкой.

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

public class UserSessionManager
{
  private static int _activeSessionCount = 0;
  private static readonly object _lock = new object();

  public void StartSession()
  {
    lock (_lock)
    {
      _activeSessionCount++;
      ....
    }
  }

  public void EndSession()
  {
    _activeSessionCount--;
    ....
  }

  ....
}

Класс UserSessionManager управляет числом активных сессий. Метод StartSession корректно инкрементирует счётчик с использованием lock, однако метод EndSession декрементирует тот же счётчик без блокировки. Это нарушает согласованность доступа к общему ресурсу _activeSessionCount.

Отсутствие блокировки может привести к состоянию гонки при одновременной работе нескольких потоков.

Для корректной работы в метод EndSession нужно добавить lock:

public class UserSessionManager
{
  private static int _activeSessionCount = 0;
  private static readonly object _lock = new object();

  public void StartSession()
  {
    lock (_lock)
    {
      _activeSessionCount++;
      ....
    }
  }

  public void EndSession()
  {
    lock (_lock)
    {
      _activeSessionCount--;
      ....
    }
  }

  ....
}

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

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

close form

Заполните форму в два простых шага ниже:

Ваши контактные данные:

Шаг 1
Поздравляем! У вас есть промокод!

Тип желаемой лицензии:

Шаг 2
Team license
Enterprise license
close form
Запросите информацию о ценах
Новая лицензия
Продление лицензии
--Выберите валюту--
USD
EUR
RUB
close form
Бесплатная лицензия PVS‑Studio для специалистов Microsoft MVP
close form
Для получения лицензии для вашего открытого
проекта заполните, пожалуйста, эту форму
close form
Я хочу принять участие в тестировании
* Нажимая на кнопку, вы даете согласие на обработку
своих персональных данных. См. Политику конфиденциальности

close form
check circle
Ваше сообщение отправлено.

Мы ответим вам на


Если вы так и не получили ответ, пожалуйста, проверьте, отфильтровано ли письмо в одну из следующих стандартных папок:

  • Промоакции
  • Оповещения
  • Спам