TMutex是否在Delphi中重入市场?

时间:2018-12-14 10:40:46

标签: delphi mutex delphi-10.1-berlin

我正在创建互斥锁:

 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;

嵌套互斥锁安全吗?

1 个答案:

答案 0 :(得分:9)

TMutex在基础平台对象上实现。在Windows上,这是互斥对象。在其他平台上是pthread互斥锁。

您的问题是TMutex是否可重入。反过来,答案取决于基础平台对象是否可重入。 Windows互斥锁始终是可重入的,pthread互斥锁是可选的可重入的,并且Delphi TMutex代码选择通过调用pthread_mutexattr_settype(Attr, PTHREAD_MUTEX_RECURSIVE)在重入模式下使用它。

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