Я хочу использовать fftw3 в потоках. Но код вставлен в http://codepad.org/lIjdGF5z вызывает ошибку «двойного освобождения или повреждения». Как правильно вызывать процедуры fftw3 в потоках. Спасибо! Вы можете скомпилировать код с помощью команды «g ++ test.cpp -lfftw3_threads -lfftw3 -lboost_thread»
Я верю призыв к fftw_plan_dft_2d
не является реентерабельным, то есть его нельзя вызывать в нескольких потоках одновременно, даже если вы создаете разные планы. Единственные функции fftw, которые являются поточно-ориентированными fftw_execute
варианты в соответствии с пунктом 2 Страница безопасности темы документации.
Кроме того, как упомянул Пол Р. в комментариях, вы должны создавать планы только один раз, а затем использовать их снова и снова. Это будет намного быстрее. Кроме того, в соответствии с пунктом 3 на странице документации Thread Safety вы можете использовать один и тот же план в нескольких одновременных вызовах fftw_execute
, Поэтому, если ваши преобразования имеют одинаковый размер, вам понадобится только один план для всех потоков.
Других решений пока нет …