【问题标题】:Is a Delphi global procedure threadsafeDelphi 全局过程是线程安全的吗
【发布时间】:2014-02-28 00:01:53
【问题描述】:

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

【问题讨论】:

  • 本地变量被放入堆栈,这是对的,除了需要额外动态分配内存的长字符串 => 你确定你的 MM 在多线程模式下运行吗?你能提供一个sscce.org吗?
  • 这也取决于你的全局函数调用的函数。一个具体的例子会有所帮助。

标签: multithreading delphi


【解决方案1】:

本地存储在堆栈上维护,每个线程都是唯一的。如果例程没有操作全局数据,则它是安全的。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 实验不能证明线程安全。这是一个有价值的测试,但线程安全必须静态推理。
    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 2015-02-15
    • 2010-11-17
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多