Delphi全局过程是线程安全的吗?

5
如果两个或多个线程调用标准的Delphi/Pascal过程(不是对象方法),这是否是线程安全的? 过程中没有实例数据,只有本地变量。
我的猜测是,一个线程使用的本地存储可能会被其他线程损坏。

本地变量被放置在堆栈上,没错,除了像长字符串这样需要额外动态分配内存的东西。您确定您的MM以多线程模式运行吗?并且您能提供一个 http://sscce.org 吗? - JensG
这也取决于您的全局函数调用哪些功能。一个具体的例子会有所帮助。 - David Heffernan
2个回答

9

本地存储在堆栈中维护,对于每个线程都是独一无二的。如果该例程没有操作全局数据,则是安全的。


0

如果只有本地变量,你应该没问题。如果我是你,我会测试一下这个理论:在过程中声明一个本地变量,在循环中将其增加一百万次,然后从两个线程调用该过程,并在一百万次增量后检查变量的值。


1
实验无法证明线程安全性。这是一个有价值的测试,但线程安全性必须在静态上进行推理。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接