在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/

10-09 03:51