Задать вопрос
@tommy87

C#, как создать потокобезопасный кэш счетчика?

Нужно аккумулировать значение по ключу(т.е. накапливать +1), после достижения значения счетчика N удалить значение из кэша. К кэшу может обращаться несколько потоков.
Т.е. кэш должен уметь делать два действия в транзакции:
- прочитать значение и увеличить его на 1
- прочитать значение и удалить ключ
при этом другие потоки при этих же операциях должны ожидать, если ключ заблокирован, и прочитать уже новое значение(или отсутствие значения), "грязное чтение" не разрешено.
Посмотрел memoryCache и ConcurrentDictionary, но они не совсем подходят.
Какими средствами воспользоваться?
  • Вопрос задан
  • 253 просмотра
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Merion Academy
    C# разработчик с нуля
    4 месяца
    Далее
  • Stepik
    Профессия "C# разработчик"
    1 неделя
    Далее
  • XYZ School
    C# для разработки игр
    5 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 1
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
public sealed class MyCounterCache
{
    Dictionary<string,int> Data = new Dictionary<string,int>();

    public int Действие1()
    {
        lock(Data)
        {
            // Do what you want
        }
    }

    public int Действие2()
    {
        lock(Data)
        {
            // Do what you want
        }
    }
}

Дальше — сами справитесь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы