Я работаю над проектом 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?
EDIT:
- Как отмечает @yoda, Parallel Computing Toolbox (PCT) позволяет блокировать вызовы между работниками MATLAB, что отлично. Тем не менее, меня особенно интересуют решения, которые не требуют PCT.
-
Зачем мне нужны
MAT_1
иMAT_2
для запуска в параллельных потоках?:Обработка, выполняемая в
MAT_2
, в среднем медленнее (и более подвержена сбою), чемMAT_1
, а выводMAT_1
подает другие программы и процессы (включая проверку человека), которые не нужно ждатьMAT_2
выполнить свою работу.
Ответы:
- Для решения, которое позволяет реализовать семафоры, но не полагается на PCT, см. ответ Йонаса ниже
- Для других хороших подходов к проблеме см. ниже ответ Yoda