Фон
Я пытаюсь спроектировать и реализовать хэш-карту без блокировки, используя метод цепочки в C ++.Каждая ячейка хеш-таблицы должна содержать список без блокировки.Чтобы разрешить изменение размера, моя структура данных должна содержать два массива - маленький, который всегда доступен, и больший для изменения размера, когда меньшего больше не достаточно.Когда создается больший, я бы хотел, чтобы данные, хранящиеся в маленьком, передавались по одному большему, всякий раз, когда какой-либо поток что-то делает со структурой данных (добавляет элемент, ищет или удаляет один).Когда все данные передаются, больший массив перемещается вместо меньшего, а последний удаляется.Цикл повторяется всякий раз, когда необходимо увеличить массив.
Проблема
Как упоминалось ранее, каждый массив должен содержать списки в ячейках.Я пытаюсь найти способ передачи значения или узла из одного списка без блокировок в другой таким образом, чтобы значение оставалось видимым в любом (или обоих) списках.Это необходимо для того, чтобы поиск в хэш-карте не давал пользователю ложных негативов.Итак, мои вопросы:
- Возможна ли такая реализация списка без блокировки?
- Если да, то какова общая концепция такого списка и операции "перемещение узла / значения"?Я был бы благодарен за любой псевдокод, код C ++ или научную статью, описывающую его.