2015-12-20 4 views
1

Нужно ли беспокоиться о проблемах синхронизации при работе с несколькими потоками?Обработка данных из нескольких потоков в синхронизации

Я программирую код, который вычисляет задержку между отдельными каналами микрофона и выводит несколько WAV-файлов с компенсированной задержкой.

Вот мой текущий метод грубой силы:

  1. Создание темы для каждого микрофона (с помощью NAudio WaveIn).
  2. Каждый раз, когда доступны записанные данные, добавьте их в большие статические буферы (по 1 для каждого микрофона).
  3. Подождите, пока импульс (хлопок, в данном случае) будет обнаружен.
  4. Ищите пики и определяйте «расстояние» (разность между индексами массива).
  5. После завершения записи сохраните записанные данные из статической памяти в .wav-файлы с соответствующим смещением для каждого из микрофонов.

Мой текущий метод (номер 2) работает, если общий сеанс записи короткий, поскольку размер статических буферов ограничен. Я чувствовал неуверенность в том, будут ли синхронизированы записанные данные или нет, если я получаю доступ к записанным данным каждый раз, когда они будут доступны.

Возможные решения:

  1. хранить их в кольцевом буфере. Внедрите счетчик для каждого потока и увеличивайте его, когда доступны новые данные. Это дает мне возможность отслеживать любые возможные проблемы с синхронизацией.

  2. Не беспокойтесь о проблеме, потому что они несуществующие?

  3. Другие возможные, более эффективные методы, о которых я не знаю?

ответ

1

Данные, которые вы получаете, как правило, эквидистантно разнесены, и я не вижу никакой интероперабельности между вашими нитями - так вычислительно мудры вы должны быть хорошо: Однако, в моем опыте NAudio любит терять кадры если ваш обратный вызов WaveIn не обрабатывается сразу. Это, безусловно, может заставить вас не синхронизироваться.

Смежные вопросы