我正在创建我的互斥体:
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/