Повторное использование FFTW в программах на основе плагинов

#c #fftw #reentrancy

#c #fftw #повторный ввод

Вопрос:

Я разрабатываю кроссплатформенное приложение (Win / Mac / Linux). Это приложение загружает плагины, которые я не контролирую, как динамические библиотеки, которые могут выполнять различные функции, в основном обработку аудио и изображений.

Некоторые из этих подключаемых модулей могут использовать FFTW как часть деталей их реализации. (Это не гипотетический случай — у меня уже есть три таких). Но семейство функций fftw_plan FFTW_FTW_PLAN не является повторным в соответствии с документами — они могут быть вызваны только одним потоком. Проблема в том, что некоторые из подключаемых модулей, которые я мог бы загрузить, могут вызывать fftw_plan глубоко внутри некоторого потока, который они создали бы сами.

Могу ли я что-то сделать, чтобы в этом случае все работало, или я должен просто согласиться с тем, что это приведет к сбою? (К сожалению, включение каждого подключаемого модуля в свой собственный процесс не является приемлемым решением для меня).

Ответ №1:

Оказывается, что FFTW предоставляет void fftw_make_planner_thread_safe(void) функцию, которая гарантирует, что плагины смогут запускать планы в отдельных потоках.

Достаточно вызвать его в начале программы.