è un po' di tempo che non scrivo server http, ma probabilmente è giusto perchè comunque lo fai nella stessa connessione.E' normale che funzioni anche il primo modo?
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