Frage

Ich habe durch Versuch und Irrtum entdeckt, dass die MATLAB -Motorfunktion nicht vollständig fadensicher ist.

Kennt jemand die Regeln?

Durch Versuch und Irrtum entdeckt:

Unter Windows erfolgt die Verbindung zu MATLAB über COM, sodass die COM -Apartment -Threading -Regeln gelten. Alle Aufrufe müssen im selben Thread auftreten, aber mehrere Verbindungen können in mehreren Threads auftreten, solange jede Verbindung isoliert ist.

Aus den folgenden Antworten scheint dies bei Unix nicht der Fall zu sein, bei dem Anrufe aus mehreren Threads getätigt werden können, solange die Anrufe seriell getätigt werden.

War es hilfreich?

Lösung

Als ich anfing, den Motor zu benutzen, habe ich keine Dokumentation zur Gewindesicherheit übernommen, daher nahm ich an, dass es sich nicht um einen Thread-Safe handelte.

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

(Bearbeiten) Ich verwende Matlab R14 auf Solaris. Ich öffne den Motor mit dem 'Engopen' -Anruf und schließe ihn mit' Engclose '. Meine Plattform stürzt nicht ab, wenn die Schließung von einem anderen Faden aufgerufen wird als der, der aufgerufen wird.

Andere Tipps

Von dem Dokumentation,

MATLAB-Bibliotheken sind nicht mit Thread-Sicherheit. Wenn Sie Multithread -Anwendungen erstellen, stellen Sie sicher, dass nur ein Thread auf die Engine -Anwendung zugreift.

Aus der Sicht eines Benutzers ist MATLABs Dolmetscher rein einzeln. Um sicher zu sein, müssen Sie wahrscheinlich alle Zugriff auf den Motor aus einem einzigen Faden erfüllen.

Beachten Sie, dass Matlab intern viele Threads verwendet. Es gibt GUI -Threads, und in den letzten Versionen kann der Dolmetscher mehrere Threads hinter den Kulissen verwenden. Der Dolmetscher entspricht jedoch semantisch einem einsthread-Dolmetscher (mit Interrupts).

Sie können verwenden engOpenSingleUse anstatt zu verwenden engOpen Um mehr als einen Thread getrennt zu machen. (Nur Windows)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top