Как выполнить одновременную вставку в таблицу с линейным зондированием ha sh? - PullRequest
0 голосов
/ 06 мая 2020

Пытаюсь написать многопоточную таблицу с линейным зондированием ha sh. Возникла проблема взаимоблокировки, которую я не знаю, как разрешить.

Предположим, что таблица ha sh имеет две страницы, каждая из которых содержит несколько сегментов. Два потока хотят вставить одновременно. Первый поток обнаружил надгробие на странице 1, а второй поток нашел надгробие на странице 2. Но перед тем, как потоки выполнят вставку, они оба должны проверить, существует ли уже ключ в таблице ha sh. Если ключ существует, вставка должна немедленно завершиться неудачей.

В моей текущей реализации каждый поток удерживает блокировку записи на странице, которую он собирается записать, а затем пытается получить блокировку чтения на других страницах. Таким образом, поток 1 пытается получить блокировку чтения на странице 2 (чья блокировка записи удерживается потоком 2), а поток 2 пытается получить блокировку чтения на странице 1 (чья блокировка записи удерживается потоком 1). Это приводит к тупиковой ситуации.

Как правильно реализовать параллельную вставку в таблицу с линейным зондированием ha sh?

...