Я пытаюсь обработать блокировки для нестандартной базы данных (то есть она сама не обеспечивает эту функцию).Моя программа имеет монопольный доступ к БД, но есть несколько параллельных потоков, которые необходимо синхронизировать.
Наивная реализация, которую я использовал ранее, заключалась в глобальной блокировке, не позволяющей параллельный доступ к отдельным строкам (что предусмотреновсегда потокобезопасен).
Для реализации этой функции я бы хотел использовать общую хэш-таблицу, в которой хранятся все идентификаторы строк, которые используются в данный момент.Доступ к этой хеш-таблице должен быть синхронизирован, обычно с помощью блокировки на нем.
Однако, если мы обнаружим, что строка, которую мы хотим использовать, уже используется, мы должны дождаться ее освобождения.Это не совсем тривиально, я предполагаю использовать сигнал для ожидания.
Хотя я не уверен, как именно это сделать.Можете ли вы придумать хороший способ для достижения этой функциональности?