#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)
функцию, которая гарантирует, что плагины смогут запускать планы в отдельных потоках.
Достаточно вызвать его в начале программы.