8

我通过反复试验发现 MATLAB 引擎函数不是完全线程安全的。

有人知道规则吗?

通过反复试验发现:

在 Windows 上,与 MATLAB 的连接是通过 COM 进行的,因此适用 COM Apartment 线程规则。所有调用都必须发生在同一个线程中,但是多个连接可以发生在多个线程中,只要每个连接都是隔离的。

从下面的答案来看,在 UNIX 上似乎不是这种情况,只要调用是串行进行的,就可以从多个线程进行调用。

4

4 回答 4

7

文档中,

MATLAB 库不是线程安全的。如果您创建多线程应用程序,请确保只有一个线程访问引擎应用程序。

于 2010-06-16T13:46:40.923 回答
3

当我第一次开始使用引擎时,我没有遇到任何关于线程安全的文档,所以我认为它不是线程安全的。

我使用 C++ 类来同步对引擎实例的访问。对于更多并行处理设计,我实例化了引擎类的多个实例。

(编辑)我在 Solaris 上使用 MATLAB R14。我使用“engOpen”调用打开引擎,并使用“engClose”关闭它。当调用关闭的线程与调用打开的线程不同时,我的平台不会崩溃。

于 2008-10-30T20:25:11.020 回答
2

从用户的角度来看,Matlab 的解释器是纯单线程的。为了安全起见,您可能需要从单个线程对引擎进行所有访问。

请注意,在内部,Matlab 使用了大量线程。有 GUI 线程,在最近的几个版本中,解释器可以在幕后使用多个线程。但是,解释器在语义上等同于单线程解释器(带有中断)。

于 2008-10-29T23:13:33.630 回答
0

您可以使用engOpenSingleUse而不是使用engOpen来使多个线程单独工作。(仅限 Windows)

于 2009-11-11T16:43:18.420 回答