Вы можете сделать хеш-таблицу без блокировки, используя неизменяемость, но она вряд ли будет эффективной, если есть конфликт.По сути, вам нужен класс словаря-контента, который можно менять местами.Вы создаете копию текущего содержимого с одним внесенным изменением, а затем используете примитив сравнения и обмена для обмена с существующей версией.Если сравнение и замена не удаются, начните заново с шага копирования.
Возможно, вы сможете атомарно поменять только одно хеш-хранилище, что значительно упростит конфликт и повторить попытку дешевле.(ConcurrentDictionary
уже использует эту оптимизацию для уменьшения конкуренции за блокировку). Но для увеличения количества сегментов все равно потребуется описанный выше метод.
Загляните в блог Эрика Липперта, в котором он описывает неизменные структуры данных.,У него есть хороший пример двоичного дерева , в котором должны быть показаны методы, необходимые для создания хэш-таблицы без блокировки.