E' normale che funzioni anche il primo modo?
è un po' di tempo che non scrivo server http, ma probabilmente è giusto perchè comunque lo fai nella stessa connessione.

Sei obbligato ad usare i thread o puoi fare anche dei fork, che mi sembrano più semplici da gestire, essendo processi differenti.

Comunque sì, devi usare i semafori, ma lo farei solo dove esegui operazioni di scrittura.

ciao
sergio