Я не уверен из вопроса, хотите ли вы по-прежнему сохранять характеристику без блокировки или просто хотите запустить и запустить 64-битное хранилище ключей / значений.(?)
Существует 64-битный MurmurHash3, размещенный здесь @kol: хэширует небольшое число в случайное 64-битное целое число
Понятно, если вы ввеливторой массив для подтверждения владения местоположением ключа и с учетом того, что для хранения значений вы можете затем прочитать и 64-разрядные значения CAS в два этапа, а затем освободить владение.Конечно, это не освобождает вас от блокировки.
--------------- Редактировать: ---------------
Автор имеет по крайней мере два видео в своей хэш-таблице, оба с 2007 года:
Дополнительные разделы в языках программирования: хеш-таблица без блокировки https://www.youtube.com/watch?v=HJ-719EGIts
Хеш-таблица быстрого ожидания без ожидания
https://youtu.be/WYXgtXWejRM
Он связывает поток своей программы с конечным автоматом.Не принимая во внимание проблему увеличения таблицы, существует четыре состояния, в которых может находиться местоположение, прежде чем к нему будет применена потенциальная мутация.Ключ / Значение = [ноль / ноль], [X / ноль], [X / X], [ноль / X].
Чтение состояния при подготовке к мутации не гарантирует при параллельности, что состояние остается неизменным во время применения мутации.
При 32-битных операциях мы имеем следующую логику:
- Если ключ чтения = требуемый ключ, значение может быть записано в местоположение.
- Если ключ чтения = ноль,и значение = не ноль, тогда другой поток изменяет местоположение.
- если ключ чтения = ноль, а значение = ноль, то местоположение может быть записано через успешный ключ CAS.
Если вы хотите использовать 32-битные атомарные операции для хранения 64-битных данных без блокировки, тогда диаграмма состояний увеличивается в размерах с большим количеством состояний отказа, например:
- вы можете прочитать наполовину созданныйKey.
- Обновление CAS одной половины записи значения может быть растоптано другим потоком, в случае неудачи на втором CAS.
- Создание CAS одной половины записи ключа может быть растоптано другим потоком,сбой на втором CAS.
- 32-битное представление инициализатора массива 'nil' должно быть исключено как половина 64-битного ключа или значение
Процесс увеличения размера таблицы добавляет некоторыебольше государств, чтобы рассмотреть, также.