Мне нужна структура данных, удовлетворяющая этим несколько необычным (AFAIK) требованиям:
- Поддерживаются следующие операции: Вставка (набор, элемент), Удаление (набор, элемент) и ForAll (набор, операция)
- Вставка и удаление - редкие операции. Обычно набор содержит только один элемент.
- Реализация должна быть осуществимой в C; в частности, нет сборки мусора для вас.
- ForAll должен быть безопасен для выполнения из обработчика асинхронного сигнала , вызов которого мог прервать вставку или удаление.
Последнее требование, конечно же, убийца. У меня есть игрушечная реализация, которая создает глобальную блокировку вокруг глобального связанного списка, но она заходит в тупик, если обработчик сигнала прерывает критическую секцию.
(Мне известны все проблемы с выполнением любого кода в обработчике сигналов; для целей этого вопроса давайте сосредоточимся на том, как сделать ForAll защищенным от сбоев и взаимоблокировок, когда он мог прерваться Вставить или Удалить.)