Gewindesicherheit der Matlab Engine API

8

Ich habe durch Versuch und Irrtum herausgefunden, dass die MATLAB-Engine-Funktion nicht vollständig Thread-sicher ist.

Kennt jemand die Regeln?

Entdeckt durch Versuch und Irrtum:

Unter Windows erfolgt die Verbindung zu MATLAB über COM, sodass 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.

    
Jeremy 29.10.2008, 21:08
quelle

4 Antworten

3

Als ich anfing, die Engine zu benutzen, bin ich nicht auf eine 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 unter 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.

    
Adam Holmberg 30.10.2008, 20:25
quelle
6

Aus der Dokumentation ,

  

MATLAB-Bibliotheken sind nicht Thread-sicher.   Wenn Sie Multithread erstellen   Anwendungen, stellen Sie nur einen sicher   Thread greift auf den Motor zu   Anwendung.

    
Jacob 16.06.2010 13:46
quelle
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 ausführen.

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).

    
Mr Fooz 29.10.2008 23:13
quelle
1

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

    
8888q8888 11.11.2009 16:43
quelle