Delphi TCriticalSection Acquire 与 Enter - 有什么区别?

Tom*_*omR 2 delphi delphi-2009 critical-section

我正在更新 Delphi (Delphi 2009) 代码,它只使用TCriticalSection.Acquire/Release对,而不是Enter/Release or Leave对。我的问题是 -Acquire和之间有什么区别Enter

Delphi 文档相当晦涩——它甚至试图说,没有区别:

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/!!MEMBERTYPE_Methods_SyncObjs_TCriticalSection.html

Acquire:将临界区绑定到调用线程。调用 Acquire 以阻止所有其他线程获取此临界区,直到调用 Release 或 Leave 方法。Acquire 的作用与 Enter 方法相同。

Enter:当调用线程进入线程敏感部分时阻塞其他线程。调用 Enter 以阻止所有其他线程进入受此临界区保护的代码,直到调用 Leave 或 Release 方法。Enter 调用 Acquire 方法将临界区绑定到调用线程。

我想要方法TryAcquire,但没有这样的方法,所以 - 我正在考虑AcquireTryEnter... Sleep...循环替换我的所有调用,这是受 TryEnter 调用努力的数量限制。但可以肯定的是什么会hapen,我应该知道的区别AcquireEnter?这是什么区别?为什么有两种不同的方法?

Dav*_*nan 5

因为TCriticalSection没有区别。Enter实现为对 的调用Acquire。同样,Leave它被实现为对 的调用Release

TryEnter方法是在 Delphi 2009 之后添加的。但它只是 Windows API 调用的简单包装TryEnterCriticalSection。您可以自己直接调用该函数。你可以,例如,使用一个类帮手介绍TryEnter到的范围TCriticalSection