Re: Thread-safe словарь с авто-инкрементируемым значением
От: frymode  
Дата: 31.01.15 09:04
Оценка:
Здравствуйте, AutumnLeaf, Вы писали:

AL>
AL>            public int Index
AL>            {
AL>                get
AL>                {
AL>                    if (_index >= 0)
AL>                    {
AL>                        return _index;
AL>                    }
                    
AL>                    lock (this)
AL>                    {
AL>                        if (_index < 0)
AL>                        {
AL>                            _index = Interlocked.Increment(ref _indexer._counter);
AL>                        }
AL>                        return _index;
AL>                    }
AL>                }
AL>            }
AL>

Менять значение внутри getter-а не самая лучшая идея, тем более мешая в одну кучу несинхронизированный доступ, lock и interlocked операции.
Лучше наверное передавать в конструктор Record сразу значение счётчика:

    return _map.GetOrAdd(key, k => new Record(Interlocked.Increment(ref _counter))).Index;
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.