1

我正在为 mex 编译的 MATLAB 创建一个 C++ 模块。我在这个模块中启动一个新线程并从中调用 matlab 函数 myCallback:

mxArray *funcName = mxCreateString("myCallback");
mxArray *text - mxCreateString("AAA");
mxArray *call[2] = {funcName, text};
mexCallMATLAB(0, NULL, 2, call, "feval");
...

myCallback 函数:

function myCallback(text)
fprintf(1,'%s\n', text);
end

并且在调用 mexCallMATLAB 后它不会打印任何内容。这些函数在与 matlab 函数相同的线程中运行良好。什么是问题?

4

1 回答 1

2

这里

基本上,答案是mex*函数不是线程安全的。这包括mexCallMATLABmexPrintf和朋友(是的,即使是 mexPrintf 也不应该从多个线程中调用)。所有mexCallMATLAB调用都必须从主线程(即与 MATLAB 本身相同的执行线程)完成。

于 2012-05-23T18:12:19.487 回答