Delphi 中的 TMutex 是否可重入?

Is TMutex re-entrant in Delphi?

我正在创建我的互斥量:

 FMutex := TMutex.Create(nil, False, 'SomeDumbText');

并在使用相同创建的互斥量调用另一个方法的方法中使用它:

procedure a;
begin
  FMutex.Acquire;
  try
    //do some work here and maybe call b
  finally
    FMutex.Release;
  end;
end;

procedure b;
begin
  FMutex.Acquire;
  try
    //do some work here
  finally
    FMutex.Release;
  end;
end;

嵌套互斥锁安全吗?

TMutex 在底层平台对象上实现。在 Windows 上,这是互斥对象。在其他平台上是 pthread mutex。

你的问题是TMutex是否可重入。反过来,答案取决于底层平台对象是否可重入。 Windows 互斥锁总是可重入的,pthread 互斥锁是可选的可重入的,Delphi TMutex 代码选择以可重入模式使用它,通过调用 pthread_mutexattr_settype(Attr, PTHREAD_MUTEX_RECURSIVE).

因此,您问题的答案是 TMutex 是可重入的。