вызов fftw в многопоточной программе

Я хочу использовать fftw3 в потоках. Но код вставлен в http://codepad.org/lIjdGF5z вызывает ошибку «двойного освобождения или повреждения». Как правильно вызывать процедуры fftw3 в потоках. Спасибо! Вы можете скомпилировать код с помощью команды «g ++ test.cpp -lfftw3_threads -lfftw3 -lboost_thread»

1

Решение

Я верю призыв к fftw_plan_dft_2d не является реентерабельным, то есть его нельзя вызывать в нескольких потоках одновременно, даже если вы создаете разные планы. Единственные функции fftw, которые являются поточно-ориентированными fftw_execute варианты в соответствии с пунктом 2 Страница безопасности темы документации.

Кроме того, как упомянул Пол Р. в комментариях, вы должны создавать планы только один раз, а затем использовать их снова и снова. Это будет намного быстрее. Кроме того, в соответствии с пунктом 3 на странице документации Thread Safety вы можете использовать один и тот же план в нескольких одновременных вызовах fftw_execute, Поэтому, если ваши преобразования имеют одинаковый размер, вам понадобится только один план для всех потоков.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]