Ti ringrazio per la risposta.

Il mio problema non è tanto la bufferizzazione, quanto la durata del write-lock sul file.

Una volta che il thread1 inizia a scrivere il primo blocco del testo (ammesso che si scelga la soluzione di scrivere un blocco non appena arriva dalla rete), è impossibile che un thread2 (o qualunque altro) inizi la sua scrittura, in quanto il primo thread ha acquisito il lock.

Potrebbe verificarsi la situazione in cui il thread2, il thread3 ... e il threadn abbiano da scrivere solo pochi caratteri, ma non possono farlo in quanto il file è "occupato" dal thread1, che a sua volta aspetta i dati dalla rete (che è l'elemento con maggior ritardo, in questo caso).

Per questo mi chiedevo se magari non fosse il caso di ricevere TUTTI i dati dalla rete (ossia scrivere in un unico buffer tutti i pacchetti in arrivo dalla rete), e POI copiarli sul file con un'unica scrittura. In questo caso il problema sarebbe la dimensione dei dati da tenere in memoria centrale; tuttavia, il thread con meno cose da scrivere potrebbe assolvere immediatamente al suo compito.