Потокобезопасность API движка Matlab - PullRequest
8 голосов
/ 30 октября 2008

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

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

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

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

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

Ответы [ 4 ]

6 голосов
/ 16 июня 2010

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

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

3 голосов
/ 30 октября 2008

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

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

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

1 голос
/ 11 ноября 2009

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

1 голос
/ 30 октября 2008

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

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

...