delphi - Delphi 中的 TMutex 是可重入的吗?

标签 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;

嵌套互斥体安全吗?

最佳答案

TMutex 是通过底层平台对象实现的。在 Windows 上,这就是互斥对象。在其他平台上,这是 pthread 互斥体。

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

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

关于delphi - Delphi 中的 TMutex 是可重入的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53778097/

相关文章:

android - 如何为下一个客户端连接正确重启 Indy TCP Server?

delphi - 如何在 Delphi 中获取 TEdit 的 Canvas ?

delphi - 如何使用 Win32_NetworkAdapter 或类似工具识别网络 "name"?

delphi - 从 Delphi 访问 BcdStore

delphi - 如何在较旧的 Delphi 版本(<2005)中编译记录的 Delphi 代码

c - 使用互斥体设置 pthread 的优先级

c++ - Win32/pthreads 线程函数上的 volatile 正确性

delphi - 判断ClientDataSet有变化的快速方法

linux - 在 Linux 内核中,我可以解锁计时器处理程序中的互斥量吗?

德尔福 10.1 柏林 : SOAP Abstract Error