Если у вас есть поток, который вызывает функцию, AFAIK, это любые глобальные вызовы или вызовы компонентов VCL, которые делают его не безопасным для потоков, верно?
Так что, если ваш поток вызвал метод, подобный
procedure UpdateRow()
begin
StringGrid1.AddRow(....);
end;
это не потокобезопасно.
Однако, если у вас есть такой метод
function ParseXML(const XML : String) : string;
var
xml_parser : TXMLParser;
begin
xml_parser := TXMLParser.create;
... do stuff
result := xml_parser.something;
xml_parser.free;
end;
это потокобезопасное, если TXMLParser не делает ничего небезопасного.
Но если два потока вызывают этот метод одновременно, он не вызовет исключения, поскольку они оба создают свой собственный экземпляр TXMLParser, верно? Они получают свою собственную копию. Это правильно?
Надеюсь, что имеет смысл:)