【问题标题】:Is it safe to instantiate a TThread-descendent from inside a thread?从线程内部实例化 Thread-descendant 是否安全?
【发布时间】:2014-10-17 09:02:36
【问题描述】:

我有一项任务,我必须做一些繁重的 CPU/RAM 工作。有了这个结果,我必须做一些数据库请求。所有这些我必须做几千次,所以我在后台线程中做。现在我正在考虑将每个任务分成两个部分并将它们拆分为 2 个单独的线程,这样第一个线程就不必等待数据库请求完成。然后它可以在第二轮等待第一轮的数据库请求时为第二轮做 CPU/RAM 的工作,一切都会加快。

现在,从第一个 TThread 后代中实例化第二个 TThread 后代是否安全?还是我需要从 MainThread 中实例化 TThread 后代?我可以两者都做,但在我的情况下,从第一个线程中实例化第二个线程会更容易,并且它将遵循 oop 范式,因为第二个线程对程序的其余部分是透明的。

【问题讨论】:

  • 绝对安全。
  • 我从来没有假设 VCL 的东西是线程安全的,而且 TThread 是如此复杂,以至于我懒得自己检查它的线程安全性。此外,由于 TThread 的复杂性,这更容易出错。
  • VCL 无关紧要。 TThread 不是 VCL 组件。 VCL 缺乏线程安全与设计时无关。它继承自Win32的底层框架。现在 Win32 是线程安全的,但窗口与创建它们的线程有关联。输入队列是面向线程的。因此,Win32 GUI 框架将引导您访问在主线程中运行的所有 Win32 GUI 代码。 VCL 只是继承了它。
  • @MartinJames 那是 .net 而不是 VS 是迂腐的。尤其是 WinForms。它的设计与 VCL 非常相似。 WPF 虽然有点不同,但更宽容。
  • @RSE: VCL = Visual Component 库。 TThread 是 RTL(Run Time 库)的一部分。 VCL 不是线程安全的,除非文档中另有说明,否则 RTL。

标签: multithreading delphi thread-safety tthread


【解决方案1】:

我在生产代码中做了很多次,但从来都不是真正的问题。我可以说它似乎非常安全。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2015-10-31
    • 2023-03-29
    • 1970-01-01
    • 2020-01-15
    相关资源
    最近更新 更多