L'ideale è che ogni thread abbia un suo file, il cui nome sia la concatenazione tra il nome immesso e l'id del thread che ci deve lavorare. Altrimenti lock o non lock, la prima fopen( stesso_nome ,"w") + fwrite() rischia di resettartelo.
Un'alternativa può essere l'apertura in modo esclusivo (non in share mode) del file. In questo caso solo il primo thread che apre il file è autorizzato dal SO a scriverci.
Questo però richiede l'uso delle API del SO (open()/write() ?) e non del C, dal momento che le API C sono solo una parziale astrazione di quello che c'è sotto.