我目前正在 MATLAB 中编写一个 MEX 文件,以使用 MATLAB 2012a 中的 parfor 函数并行运行实验。MEX 文件执行一些非常简单的数字任务,但依赖于 IBM 的 CPLEX 12.4 API。
虽然我的 MEX 文件是按顺序运行的,但当我并行运行时,我不可避免地会收到“随机”分段错误。在将分段错误的堆栈跟踪发送到 MATLAB 后,他们建议错误源自 C 库中的“putenv()”函数,这显然不是线程安全的。
我没有在 MEX 代码中使用 putenv() 函数,但事实证明,我绝对必须从 CPLEX 12.4 调用的函数之一确实使用了它。我想知道是否有什么办法可以避免此功能导致的分段错误。以前有人建议“锁定我的位”和“使用信号量”,但当谈到这些概念时,我真的有点不知所措。
任何建议或方向将不胜感激。