Я хочу использовать fftw3 в потоках. Но код, вставленный в http://codepad.org/lIjdGF5z, вызывает ошибку «двойное освобождение или повреждение». Как правильно вызвать функции fftw3 в потоках. Благодаря! Вы можете скомпилировать код с помощью команды «g ++ test.cpp -lfftw3_threads -lfftw3 -lboost_thread»вызов fftw в программе с несколькими потоками
ответ
Я считаю, что вызов fftw_plan_dft_2d
не является реентерабельным, что означает, что он не может быть вызван в нескольких потоках одновременно, даже если вы создавая разные планы. Единственными функциями fftw, которые являются потокобезопасными, являются варианты fftw_execute
в соответствии с пунктом 2 документа Thread Safety page.
Кроме того, как сказал Пол Р. в комментариях, вы должны только создать план/с один раз в начале, а затем использовать их снова и снова. Это будет намного быстрее. Кроме того, согласно пункту 3 страницы документации по технике безопасности, вы можете использовать один и тот же план при нескольких одновременных вызовах до fftw_execute
. Поэтому, если ваши преобразования имеют одинаковый размер, вам понадобится только один план для всех потоков.
как насчет программы, вставленной на http://codepad.org/nHSAN1lJ. В потоке содержится только повторная программа fftw – user41635
Работает ли она? Если нет, я не думаю, что вам нужно использовать интерфейс 'fftw_plan_many_dft' здесь. Это значит, что если у вас есть несколько 2D FFT, чтобы выполнить последовательность с одним вызовом 'fftw_execute'. Тот факт, что вы вызываете его с 'howmany == 1', означает, что вы по-прежнему выполняете только одно двумерное преобразование на' fftw_execute'. Вы можете использовать простой интерфейс 'fftw_plan_dft_2d'. –
Как можно использовать один и тот же план в нескольких одновременных вызовах 'fftw_execute'? Поскольку план инкапсулирует его ввод/вывод, не даст ли вам либо неопределенные, либо, в лучшем случае, идентичные результаты? –
- 1. Как обрабатывать окно в программе с несколькими потоками
- 2. Диспетчер с несколькими потоками
- 3. CreateFileMapping с несколькими потоками
- 4. rand() с несколькими потоками
- 5. synchronizedList с несколькими потоками
- 6. Tkinter с несколькими потоками
- 7. Сортировка с несколькими потоками
- 8. Вызов одного метода с несколькими потоками в python
- 9. Как настроить FFTW с потоками и различными точками?
- 10. Что действительно делает sys.exit с несколькими потоками?
- 11. Работа с несколькими потоками Android
- 12. Java Swing с несколькими потоками
- 13. Сортировка файла с несколькими потоками
- 14. Синтаксис CoreData с несколькими потоками
- 15. STDOUT порядок с несколькими потоками
- 16. Число квадратов с несколькими потоками
- 17. Обработка сообщений с несколькими потоками
- 18. Запуск ffmpeg с несколькими потоками
- 19. Проблема с несколькими потоками Android SQLite
- 20. Замерзание Tkinter с несколькими потоками
- 21. Параллельный фактор с несколькими потоками
- 22. клиентский сервер с несколькими потоками
- 23. C++ сервер с несколькими потоками
- 24. Приложение Qt с несколькими потоками
- 25. nanosleep не работает с несколькими потоками
- 26. StringBuilder, измененный несколькими потоками
- 27. Управление несколькими параллельными потоками
- 28. Связь между несколькими потоками
- 29. synchronizedList доступ несколькими потоками
- 30. Как управлять несколькими потоками
Вы не должны создавать и уничтожать план каждый раз, когда выполняете БПФ. Просто сделайте это один раз. –