現在、MATLAB 2012aのparfor関数を使用して実験を並行して実行するために、MATLABでMEXファイルをコーディングしています。MEXファイルは、いくつかの非常に単純な数値タスクを実行しますが、IBMのCPLEX12.4APIに依存しています。
私のMEXファイルは順番に動作しますが、並列で実行すると、必然的に「ランダムな」セグメンテーション違反が発生します。セグメンテーション違反のスタックトレースをMATLABに送信した後、彼らは、エラーがCライブラリの「putenv()」関数に起因することを示唆しました。これは明らかにスレッドセーフではありません。
MEXコードでputenv()関数を使用していませんが、CPLEX12.4から絶対に呼び出さなければならない関数の1つがそれを使用していることがわかりました。この関数の結果として発生するセグメンテーション違反を回避するために何かできることがあるかどうか疑問に思っています。以前、誰かが「ビットをロックする」と「セマフォを使用する」ことを提案しましたが、これらの概念に関しては、私は本当に頭がおかしいです。
アドバイスや指示をいただければ幸いです。