【问题标题】:How to safely dispose an object in a thread while another thread could use the object in Delphi?如何在一个线程中安全地处理一个对象,而另一个线程可以在 Delphi 中使用该对象?
【发布时间】:2016-05-12 03:13:17
【问题描述】:

如何在一个线程中安全地释放一个对象,而另一个线程可以在 Delphi 中使用该对象? 有什么想法或文章可以阅读吗?

【问题讨论】:

  • 永远不要释放仍然可以访问的对象。从不。

标签: multithreading delphi thread-safety


【解决方案1】:

您必须确保其他线程不再使用该对象,然后才能安全地处理它。

用锁来包装对对象的所有访问,例如临界区或互斥锁。

或者使对象被引用计数。让每个线程在处理对象时增加引用计数,并在完成时减少它。然后,您可以在对象的引用计数减为 0 后处理该对象。编写实现 Delphi interfaceTInterfacedObject 派生类将非常适合此目的,并自动为您完成大部分工作。

【讨论】:

  • 我链接的文档中有示例。
  • @qgi 阅读有关 OmniThreadLibrary 的任何示例 - 它们的集合和几乎所有其他原语正是为多线程使用而制作的 ARC 对象。或者阅读任何关于通过 COM 接口使用 Word/Excel 的文章——这些接口也被映射到 Delphi ARC 对象中,尽管这些文章不会公开多线程程序设计。
猜你喜欢
  • 1970-01-01
  • 2013-01-26
  • 1970-01-01
  • 2021-10-26
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多