2008-10-29 11 views
8

Ich habe durch Versuch und Irrtum herausgefunden, dass die MATLAB-Engine-Funktion nicht vollständig threadsicher ist.Gewindesicherheit von Matlab Engine API

Kennt jemand die Regeln?

Entdeckt durch Versuch und Irrtum:

unter Windows die Verbindung zu MATLAB ist über COM, so dass die COM-Apartment Threading Regeln gelten. Alle Aufrufe müssen in demselben Thread stattfinden, aber mehrere Verbindungen können in mehreren Threads auftreten, solange jede Verbindung isoliert ist.

Aus den Antworten unten scheint es, dass dies unter UNIX nicht der Fall ist, wo Aufrufe von mehreren Threads ausgeführt werden können, solange die Aufrufe seriell erfolgen.

+0

afaik MATLAB Engine mit COM auf Windows implementiert und mit Rohren auf Unix: http://www.mathworks.com/help/matlab/matlab_external/ using-matlab-engine.html – Amro

Antwort

3

Als ich anfing, den Motor zu benutzen, bin ich auf keine Dokumentation zur Threadsicherheit gestoßen, daher nahm ich an, dass sie nicht threadsicher war.

Ich verwende eine C++ - Klasse, um den Zugriff auf eine Engine-Instanz zu synchronisieren. Für mehr parallele Verarbeitungsdesigns instanziiere ich mehrere Instanzen der Engine-Klasse.

(bearbeiten) Ich verwende MATLAB R14 auf Solaris. Ich öffne den Motor mit dem Aufruf 'engOpen' und schließe ihn mit 'engClose'. Meine Plattform stürzt nicht ab, wenn der Close von einem anderen Thread aufgerufen wird als derjenige, der Open aufgerufen hat.

1

Aus der Perspektive eines Benutzers ist der Matlab-Interpreter rein single-threaded. Um sicherzugehen, müssen Sie wahrscheinlich alle Zugriffe auf die Engine über einen einzigen Thread vornehmen.

Beachten Sie, dass Matlab intern viele Threads verwendet. Es gibt GUI-Threads, und in den letzten Versionen kann der Interpreter mehrere Threads hinter den Kulissen verwenden. Aber der Interpreter ist semantisch äquivalent zu einem single-threaded Interpreter (mit Interrupts).

1

Sie können engOpenSingleUse anstelle von engOpen verwenden, um mehr als einen Thread separat arbeiten zu lassen. (Nur Windows)

6

Vom documentation,

MATLAB libraries are not thread-safe. If you create multithreaded applications, make sure only one thread accesses the engine application.