线程安全例程在线程类之外

Wiz*_*ard 2 delphi multithreading thread-safety

如果你有一个调用函数的线程,AFAIK是任何全局或VCL组件调用,这使得它不是线程安全的吗?

所以如果你的线程调用了类似的方法

procedure UpdateRow()
begin
    StringGrid1.AddRow(....);
end;
Run Code Online (Sandbox Code Playgroud)

这不是线程安全的.但是如果你有这样的方法

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;
Run Code Online (Sandbox Code Playgroud)

这是线程安全的,只要TXMLParser没有做任何unthread安全的事情.

但是如果两个线程同时调用该方法,它不会抛出异常,因为它们都创建了自己的TXMLParser实例吗?他们得到自己的副本.那是对的吗?

希望有道理:)

And*_*and 7

对,那是正确的.