В настоящее время я кодирую файл MEX в MATLAB для параллельного запуска экспериментов с использованием функции parfor в MATLAB 2012a. Файл MEX выполняет некоторые очень простые числовые задачи, но полагается на API CPLEX 12.4 от IBM.
Хотя мой файл MEX работает последовательно, я неизбежно получу "случайную" ошибку сегментации когда работаю параллельно. После отправки трассировки стека ошибки сегментации в MATLAB они предположили, что ошибка возникает из-за функции «putenv ()» из библиотеки C, которая, по-видимому, не является потокобезопасной.
Я не использую функцию putenv () в моем MEX-коде, но оказалось, что одна из функций, которые мне абсолютно необходимо вызывать из CPLEX 12.4, действительно использует ее. Мне интересно, могу ли я что-нибудь сделать, чтобы избежать ошибок сегментации, возникающих в результате этой функции. Кто-то ранее предлагал «блокировать мои биты» и «использовать семафоры», но я действительно немного не в себе, когда дело касается этих концепций.
Мы будем очень благодарны за любой совет или направление.