Да, это распространенный способ избежать задержек, когда диск достаточно быстр для обработки средней скорости передачи данных, но когда случайные пики данных, запись в кэш диска, обновления каталогов и другие подобные причины вызывают периодическую потерю данных.
Вам нужна очередь производитель-потребитель. Такой класс или код / структура, использующие condvars или семафоры, легко найти в SO или в другом месте net. Очередь нуждается только в очереди указателей.
Не используйте широкую очередь для постановки в очередь массовых данных. Как только он будет прочитан из [где угодно], прочитайте его в неправильно распределенный буфер / структуру, в которой есть данные, путь, команда и все остальное, что потоку записи может понадобиться для выполнения записи. Поставьте в очередь указатель структуры на поток записи. В потоке записи l oop округляет всплывающую очередь P- C, получает указатели, выполняет запись (или все, что задано полем команды struct) и, если нет ошибок, освобождает struct. Если есть какая-то проблема, вы можете загрузить сообщение об ошибке в какое-то поле структуры и снова поставить его в очередь для какого-либо потока регистрации ошибок, сохранить его в очереди, чтобы повторить попытку позже, на самом деле.
Таким образом, вы изолируете остальную часть своего приложения от этих неизбежных, случайных задержек диска. Это очень важно для дисков с высокой задержкой, например. те в сети. Это также значительно упрощает вспомогательные операции, например, некоторый часовой таймер может поставить в очередь структуру, поле команды которой указывает потоку открыть новый файл с отметкой даты и времени в имени файла, что упрощает отслеживание данных позже без пробираясь через один массивный файл :) Такие операции, без очереди и потока записи, несомненно, вызовут огромную задержку для вашего приложения: (