Dein Problem kannst du sehr einfach mit CriticalSections lösen.
Inplementiere eine TCriiticalSection als Feldvariable in deine Thread-Klasse.
Immer wenn auf gemeinsam genutzte Dateien, Objekte usw. zugegriffen wird, machts du das innerhalb einer CriticalSection.
Delphi-Quellcode:
...
FCriticalSection.Enter;
try
//Zugriff auf gemeinsam genutzte Objekte, Dateien usw.
finally
FCriticalSection.Leave;
end;
...