Семафоры и блокировки в MATLAB

Я работаю над проектом MATLAB, в котором я хотел бы, чтобы два экземпляра MATLAB работали параллельно и обменивались данными. Я назову эти экземпляры MAT_1 и MAT_2 . Более конкретно, архитектура системы такова:

  1. MAT_1 последовательно обрабатывает изображения, считывая их одно за другим, используя imread , и выводит результат для каждого изображения, используя imwrite .
  2. MAT_2 считывает изображения, выводимые MAT_1 , используя imread , и выводит результат где-то еще.

Одна из проблем, которые, как мне кажется, мне нужно решить, - это следующее: гарантировать, что MAT_2 считывает изображение, выводимое MAT_1 , как только MAT_1 полностью закончит запись в него.

Мои вопросы:

  1. Как вы подойдете к этой проблеме? Нужно ли мне использовать семафоры или блокировки для предотвращения состояний гонки?
  2. Предоставляет ли MATLAB какой-либо механизм для блокировки файлов? (т.е. что-то похожее на flock , но предоставляется непосредственно MATLAB и работает на нескольких платформах, например, Windows и Linux). Если нет, знаете ли вы о какой-нибудь сторонней библиотеке, которую я могу использовать для создания этого механизма в MATLAB?

EDIT:

  • Как @yoda указывает ниже, Parallel Computing Toolbox (PCT) позволяет блокировать вызовы между Рабочие MATLAB, и это здорово. При этом меня особенно интересуют решения, не требующие РСТ.
  • Почему мне требуются MAT_1 и MAT_2 для работы в параллельных потоках?:

    Обработка, выполняемая в MAT_2 , в среднем медленнее (и больше) подвержены сбоям), чем MAT_1 , а вывод MAT_1 питает другие программы и процессы (включая проверку человеком), которым не нужно ждать, пока MAT_2 выполнит его работа.

Ответы:

  • Для решения, которое допускает реализацию семафоров, но не полагается на PCT, см. Ответ Йонаса ниже
  • Для других подходящих подходов к проблеме см. Ответ Йоды ниже

13
задан Amelio Vazquez-Reina 21 June 2011 в 13:12
поделиться