Pregunta

Descubrí mediante prueba y error que la función del motor MATLAB no es completamente segura para subprocesos.

¿Alguien sabe las reglas?

Descubierto a través de prueba y error:

En Windows, la conexión a MATLAB se realiza a través de COM, por lo que se aplican las reglas de subprocesamiento de COM Apartment. Todas las llamadas deben ocurrir en el mismo hilo, pero pueden ocurrir múltiples conexiones en múltiples hilos siempre y cuando cada conexión esté aislada.

A partir de las respuestas a continuación, parece que este no es el caso en UNIX, donde se pueden realizar llamadas desde varios subprocesos, siempre y cuando las llamadas se realicen en serie.

¿Fue útil?

Solución

Cuando comencé a usar el motor por primera vez, no encontré ninguna documentación sobre seguridad de subprocesos, por lo que asumí que no era seguro para subprocesos.

Uso una clase de C ++ para sincronizar el acceso a una instancia del motor. Para más diseños de procesamiento en paralelo, instalo varias instancias de la clase de motor.

(editar) Estoy usando MATLAB R14 en Solaris. Abro el motor con la llamada 'engOpen' y lo cierro con 'engClose'. Mi plataforma no falla cuando se llama a un subproceso diferente al que se llama Abrir.

Otros consejos

De la documentación ,

  

Las bibliotecas MATLAB no son seguras para subprocesos.   Si creas multiproceso   aplicaciones, asegúrese de que sólo una   hilo accede al motor   aplicación.

Desde la perspectiva de un usuario, el intérprete de Matlab es puramente de un solo hilo. Para estar seguro, es probable que deba hacer todo el acceso al motor desde un solo hilo.

Tenga en cuenta que internamente, Matlab usa muchos hilos. Hay subprocesos de GUI, y en las últimas versiones, el intérprete puede usar varios subprocesos detrás de la escena. Pero, el intérprete es semánticamente equivalente a un intérprete de un solo hilo (con interrupciones).

Puede utilizar engOpenSingleUse en lugar de engOpen para hacer que más de un hilo funcione por separado. (Sólo Windows)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top