Я бы наверное сделал отдельную очередь и поток для записи. Грубо говоря: каждый поток-обработчик ставит в очередь сообщения вида: "Начало записи", "Блок данных, которые должны идти последовательно", "Еще блоки"... "Конец записи". А поток, который сидит на записи, выбирает из очереди эти сообщения, собирает из них правильные последовательности данных и записывает целиком в файл. Тогда исключаются и конфликты и перемешивание данных (если это критично).