В настоящее время я кодирую MEX-файл в MATLAB для параллельной работы экспериментов с использованием функции parfor в MATLAB 2012a. Файл MEX выполняет очень простые численные задачи, но опирается на API CPLEX 12.4 от IBM.Работа с ошибками сегментации, которые происходят параллельно из-за функции, не поддерживающей потоки API
Хотя мой файл MEX работает последовательно, I will inevitably receive "random" segmentation fault when I run in in parallel. После отправки трассировки стека ошибки сегментации в MATLAB они предположили, что ошибка исходит из функции «putenv()» из библиотеки C, которая, по-видимому, не является потокобезопасной.
Я не использую функцию putenv() в своем коде MEX, но оказывается, что одна из функций, которую я абсолютно должен вызывать из CPLEX 12.4, действительно ее использует. Мне интересно, есть ли что-нибудь, что я мог бы сделать, чтобы избежать ошибок сегментации, которые возникают в результате этой функции. Кто-то ранее предлагал «блокировать мои биты» и «использовать семафоры», но я действительно немного над головой, когда дело доходит до этих понятий.
Любые советы или направления были бы очень оценены.
Позвоните в службу поддержки IBM и сообщите им, чтобы исправить их lib, чтобы он эффективно использовался на компьютерах после 2000 года? Я предполагаю, что библиотека непрозрачна, у вас нет исходного кода и невозможно ее перестроить? –