В странном случае, когда такой вещи нет, вы также можете взглянуть на разные среды, чтобы реализовать то, что вы хотите. Это может быть чем-то вроде обходного пути, но вы всегда можете связать свой код MATLAB с другими языками (например, Java, .NET, C, ...) и использовать функциональность, к которой вы привыкли. С Java вы совершенно уверены, что ваше решение не зависит от платформы, .NET работает только в Windows (по крайней мере, в сочетании с MATLAB).
отаю над проектом MATLAB, где мне бы хотелось, чтобы два экземпляра MATLAB работали параллельно и обменивались данными. Я назову эти случаиMAT_1
а такжеMAT_2
, В частности, архитектура системы:
MAT_1
обрабатывает изображения последовательно, читая их одно за другим, используяimread
и выводит результат для каждого изображения, используяimwrite
.MAT_2
читает выводимые изображенияMAT_1
с помощьюimread
и выводит свой результат где-то еще.Одна из проблем, которую я должен решить, это гарантироватьMAT_2
читает вывод изображенияMAT_1
один разMAT_1
полностью закончил писать к нему.
Мои вопросы:
Как бы вы подошли к этой проблеме? Нужно ли использовать семафоры или замки для предотвращения гонки?Предоставляет ли MATLAB какой-либо механизм для блокировки файлов? (то есть что-то похожее наflock
, но предоставляется непосредственно MATLAB и работает на нескольких платформах, например Windows & Linux). Если нет, знаете ли вы какую-либо стороннюю библиотеку, которую я могу использовать для создания этого механизма в MATLAB?РЕДАКТИРОВАТЬ :Как указывает @yoda ниже, Parallel Computing Toolbox (PCT) позволяет блокировать вызовы между работниками MATLAB, и это здорово. Тем не менее, я особенно заинтересован в решениях, которые не требуют PCT.Почему я требуюMAT_1
а такжеMAT_2
работать в параллельных потоках?
Обработка сделана вMAT_2
в среднем медленнее (и более подвержен сбоям), чемMAT_1
и выводMAT_1
подпитывает другие программы и процессы (в том числе человеческий осмотр), которые не нужно ждатьMAT_2
делать свою работу.