@tommy87

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

Нужно аккумулировать значение по ключу(т.е. накапливать +1), после достижения значения счетчика N удалить значение из кэша. К кэшу может обращаться несколько потоков.
Т.е. кэш должен уметь делать два действия в транзакции:
- прочитать значение и увеличить его на 1
- прочитать значение и удалить ключ
при этом другие потоки при этих же операциях должны ожидать, если ключ заблокирован, и прочитать уже новое значение(или отсутствие значения), "грязное чтение" не разрешено.
Посмотрел memoryCache и ConcurrentDictionary, но они не совсем подходят.
Какими средствами воспользоваться?
  • Вопрос задан
  • 240 просмотров
Пригласить эксперта
Ответы на вопрос 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
        }
    }
}

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

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

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