Хорошо, я предполагаю, что http-часть работает нормально, и сервер может принимать несколько запросов, а промежуточные части поддерживаются. Теперь, просто входя в ваш поток, я вижу, что вы держите один объект мьютекса: o. Это само по себе делает всю операцию последовательной (по одному handlerRequest за раз), потому что одновременно выполняется только один поток, что вам не нужно. Весь блок кода не нуждается в безопасности потоков, что вы скажете?
Вам нужно создать 5 потоков с 5 объектами потока для ожидания, я не знаю, что для этого используется в Linux, но в Windows вы бы использовали WaitForMultipleObjects, возможно, проверьте это:
Экземпляры WaitForSingleObject и WaitForMultipleObjects в linux
Обычно, когда файл должен быть загружен по частям, вы запрашиваете размер файла с сервера, выделяете файл на диске возвращаемой длины, открываете несколько файловых указателей (в вашем случае 5), начиная с разных позиций, каждый поток будет использовать соответствующий файловый указатель для записи в этот файл. Как только 5 мьютексов (или любых других правильных объектов потока) будут освобождены, это будет означать, что 5 потоков завершили работу, и затем SendData сможет сделать свое дело.
Надеюсь, я не совсем ошибаюсь, хе-хе:)