在Windows平台上,TCriticalSection通过调用Windows API EnterCriticalSection/LeaveCriticalSection来实现。 Microsoft文档明确表示,在线程拥有关键部分的所有权之后,它可以对EnterCriticalSection进行其他调用。
到目前为止,一切都很好。
但是,Delphi支持的其他平台(如OSX,iOS和Android)下的行为如何?
其他平台似乎也使用TMonitor。因此,可以针对TMonitor重写问题。
最佳答案
在Windows以外的其他平台上,TCriticalSection的实现仅使用TMonitor。因此,您问题的答案仅限于TMonitor.Enter的行为。至少文档指出TMonitor.Enter是可重入的。
documentation的这一部分对您的答案表示"is":
TMonitor的相关代码部分在TMonitor.TryEnter中:
function TMonitor.TryEnter: Boolean;
begin
if FOwningThread = GetCurrentThreadId then // check for recursion
begin
...
Result := True;
...
关于android - 线程可以安全地多次调用TCriticalSection.Acquire吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21701531/