Вопрос

Я методом проб и ошибок обнаружил, что функция движка MATLAB не является полностью поточно-ориентированной.

Кто-нибудь знает правила?

Обнаружено методом проб и ошибок:

В Windows подключение к MATLAB осуществляется через COM, поэтому применяются правила потоков в COM-квартире. Все вызовы должны происходить в одном потоке, но несколько соединений могут происходить в нескольких потоках, если каждое соединение изолировано.

Из приведенных ниже ответов видно, что это не относится к UNIX, где вызовы могут выполняться из нескольких потоков, если вызовы выполняются последовательно.

Это было полезно?

Решение

Когда я впервые начал использовать движок, я не сталкивался с какой-либо документацией по безопасности потоков, поэтому предположил, что она не безопасна для потоков.

Я использую класс C ++ для синхронизации доступа к экземпляру движка. Для более параллельной обработки проектов я создаю несколько экземпляров класса механизма.

(правка) Я использую MATLAB R14 в Solaris. Я открываю движок с помощью вызова engOpen и закрываю его с помощью engClose. Моя платформа не падает, когда Close вызывается другим потоком, чем тот, который вызвал Open.

Другие советы

Из документации ,

  

Библиотеки MATLAB не являются поточно-ориентированными.   Если вы создаете многопоточный   приложения, убедитесь, что только один   нить получает доступ к двигателю   приложение.

С точки зрения пользователя, интерпретатор Matlab является чисто однопоточным. Чтобы быть в безопасности, вам, вероятно, нужно сделать весь доступ к движку из одного потока.

Обратите внимание, что внутри Matlab использует множество потоков. Существуют потоки GUI, и в последних нескольких версиях интерпретатор может использовать несколько потоков за кулисами. Но интерпретатор семантически эквивалентен однопоточному интерпретатору (с прерываниями).

Вы можете использовать engOpenSingleUse вместо engOpen , чтобы несколько потоков работали отдельно. (Только Windows)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top