【发布时间】:2020-09-25 11:46:55
【问题描述】:
我正在更新 Delphi (Delphi 2009) 代码,它专门使用 TCriticalSection.Acquire/Release 对,而不是 Enter/Release or Leave 对。我的问题是 - Acquire 和 Enter 有什么区别?
Delphi 文档非常晦涩——它甚至试图说没有区别:
Acquire:将临界区绑定到调用线程。称呼 获取以阻止所有其他线程获取此关键 部分,直到调用 Release 或 Leave 方法。获取 与 Enter 方法相同。
Enter:当调用线程进入某个线程时阻塞其他线程 线程敏感部分。调用 Enter 阻止所有其他线程 输入受此关键部分保护的代码,直到离开或 调用释放方法。 Enter 调用 Acquire 方法绑定 调用线程的临界区。
我想要方法TryAcquire,但没有这样的方法,所以-我正在考虑用TryEnter... Sleep...循环替换我对Acquire的所有调用,该循环受TryEnter调用次数的限制努力。但要确定会发生什么,我应该知道Acquire 和Enter 之间的区别?这个区别是什么?为什么有两种不同的方法?
【问题讨论】:
-
Enter只是Acquire的别名,Acquire是从TSynchroObject继承的名称,并具有覆盖实现。
标签: delphi delphi-2009 critical-section