Our website uses cookies to enhance your browsing experience.
Accept
to the top
>
>
>
V3223. Inconsistent use of a...
menu mobile close menu
Additional information
toggle menu Contents

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

May 29 2025

The analyzer has detected inconsistent use of a shared resource: it is used both with and without a lock.

The example:

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--;
    ....
  }

  ....
}

The UserSessionManager class handles the number of active sessions. The StartSession method correctly increments a counter using lock, but the EndSession method decrements the same counter without locking. This results in inconsistent access synchronization to the shared _activeSessionCount resource.

When multiple threads run concurrently, the lack of locking may lead to a data race.

To ensure correct operation, add lock in the EndSession:

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--;
      ....
    }
  }

  ....
}

This diagnostic is classified as: