Question

J'ai découvert par essais et erreurs que la fonction du moteur MATLAB n'était pas totalement thread-safe.

Quelqu'un connaît-il les règles?

Découvert par essais et erreurs:

Sous Windows, la connexion à MATLAB se fait via COM. Par conséquent, les règles de threading COM Apartment s'appliquent. Tous les appels doivent avoir lieu dans le même thread, mais plusieurs connexions peuvent exister dans plusieurs threads tant que chaque connexion est isolée.

D'après les réponses ci-dessous, il semble que ce ne soit pas le cas sous UNIX, où les appels peuvent être passés à partir de plusieurs threads tant qu'ils sont passés en série.

Était-ce utile?

La solution

Lorsque j'ai commencé à utiliser le moteur, je ne trouvais aucune documentation sur la sécurité des threads. J'ai donc supposé qu'il n'était pas thread-safe.

J'utilise une classe C ++ pour synchroniser l'accès à une instance de moteur. Pour des conceptions de traitement plus parallèles, j'instancie plusieurs instances de la classe de moteurs.

(modifier) ??J'utilise MATLAB R14 sous Solaris. J'ouvre le moteur à l'aide de l'appel 'engOpen' et le ferme à l'aide de 'engClose'. Ma plate-forme ne plante pas lorsque la fermeture est appelée par un autre thread que celui qui a appelé Ouvrir.

Autres conseils

Extrait de la documentation ,

  

Les bibliothèques MATLAB ne sont pas thread-safe.   Si vous créez multithread   applications, assurez-vous qu'un seul   le fil accède au moteur   application.

Du point de vue de l'utilisateur, l'interpréteur de Matlab est purement mono-thread. Pour plus de sécurité, vous devez probablement effectuer tous les accès au moteur à partir d'un seul thread.

Notez qu'en interne, Matlab utilise beaucoup de threads. Il existe des threads d'interface graphique et, dans les dernières versions, l'interprète peut utiliser plusieurs threads en coulisse. Mais, l’interprète est sémantiquement équivalent à un interprète à un seul thread (avec interruptions).

Vous pouvez utiliser engOpenSingleUse au lieu d'utiliser engOpen pour que plusieurs threads fonctionnent séparément. (Windows uniquement)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top