Есть главный поток приложения. Дополнительно создается служебный поток, который по аппаратно генерируемому событию просыпается и обрабатывает свежепоступившие данные. После обработки служебный поток должен сохранить данные в какую то структуру/массив (пока что используется STLный vector).
Время обработки данных в служебном потоке ограничено 40 миллисекундами, т.е. служебный поток должен хватать данные и обрабатывать в риал-тайме и он не имеет право пропускать данные. С этим проблем нет, но поступающими данными пользуется главный поток приложения.
Главный поток также осуществляет дальнейшую обработку всего массива полученных данных. Главный поток не критичен по времени и для него допустимы любые задержки обработки вплоть до секунды.
Вопрос: каким образом изящно обеспечить конкурентный доступ к массиву поступающих данных не имея возможности его надолго блокировать ?
Все что мне лезет на ум: блокировать массив, копировать нужный кусок данных и мигом его разблокировать, чтобы служебный поток имел время на добавление данных.
Буду очень признателен за совет.
Время обработки данных в служебном потоке ограничено 40 миллисекундами, т.е. служебный поток должен хватать данные и обрабатывать в риал-тайме и он не имеет право пропускать данные. С этим проблем нет, но поступающими данными пользуется главный поток приложения.
Главный поток также осуществляет дальнейшую обработку всего массива полученных данных. Главный поток не критичен по времени и для него допустимы любые задержки обработки вплоть до секунды.
Вопрос: каким образом изящно обеспечить конкурентный доступ к массиву поступающих данных не имея возможности его надолго блокировать ?
Все что мне лезет на ум: блокировать массив, копировать нужный кусок данных и мигом его разблокировать, чтобы служебный поток имел время на добавление данных.
Буду очень признателен за совет.