Какой структурой можно повесить lock на диапазон?

В C# для блокировки диапазона значений, вам необходимо использовать объект, который содержит в себе данное значение диапазона. Наиболее удобным способом является использование объекта object, который будет представлять собой блокировку для данного диапазона значений.

Пример кода:

public class RangeLock
{
    private object lockObject = new object();

    public void DoSomethingWithinRange(int minValue, int maxValue)
    {
        lock (lockObject) // Блокируем диапазон значений
        {
            // Выполняем действия внутри диапазона
            for (int i = minValue; i <= maxValue; i++)
            {
                // Ваш код здесь
            }
        }
    }
}

В данном примере создается класс RangeLock, который содержит объект lockObject для блокировки диапазона значений. Метод DoSomethingWithinRange принимает минимальное и максимальное значения диапазона, и выполняет необходимые действия внутри этого диапазона, обеспечивая при этом потокобезопасность с помощью блока lock.

Таким образом, вы можете использовать объект object как блокировку для диапазона значений в C#, обеспечивая безопасное выполнение операций в пределах этого диапазона для многопоточных приложений.