【问题标题】:How to call mexCallMATLAB from another thread如何从另一个线程调用 mexCallMATLAB
【发布时间】:2012-05-23 16:39:05
【问题描述】:

我正在为 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 函数相同的线程中运行良好。有什么问题?

【问题讨论】:

  • 在下面查看我的答案。它回答了为什么不能在多个线程中使用mex* 函数的基本问题。但更大的问题是为什么你要这样做。为什么?您需要考虑以某种方式重新设计代码。
  • 另见讨论here
  • 我将实现一个从服务器接收答案的matlab-client程序。所以这个过程必须是异步的,matlab客户端不应该等待一个答案来继续它的程序。

标签: multithreading matlab unix pthreads mex


【解决方案1】:

here

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多