Я не могу рекомендовать какие-либо библиотеки, которые делают это специально для C, но если вы в конечном итоге сделаете это самостоятельно, вы могли бы потенциально избежать необходимости иметь тысячи блокировок, повторно используя небольшое количество блокировок и некоторое "хеширование"."решить, что использовать для каждого узла.Вы бы получили довольно много случаев, когда не было бы никакого конфликта, если бы количество блокировок было соответственно больше, чем количество узлов для небольших накладных расходов пространства (и это фиксировано, а не для узла).
Обновление, для РЕДАКТИРОВАНИЯ 1
Вы можете обойти эту проблему, имея несколько читателей для каждого списка, одну блокировку записи, ( rwlock ), где вы получаетепрочитайте «блокировку до получения блокировки на узел для вставок, но для удаления вам нужно получить единственную блокировку« записи ».Вы довольно легко избегаете ненужных проблем синхронизации для операций чтения / вставки, а удаление достаточно просто.(Предполагается, что delete гораздо реже, чем insert)