TMutex повторно входит в Delphi? - PullRequest
       71

TMutex повторно входит в Delphi?

0 голосов
/ 14 декабря 2018

Я создаю свой мьютекс:

 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 голосов
/ 14 декабря 2018

TMutex реализовано поверх базового объекта платформы.В Windows это объект мьютекса.На других платформах, которые являются мьютексом pthread.

Ваш вопрос заключается в том, является ли TMutex повторным входом.В свою очередь, ответ зависит от того, является ли базовый объект платформы реентерабельным.Мьютекс Windows всегда реентерабельный, мьютекс pthread опционально реентерабельный, а код Delphi TMutex выбирает его использование в реентерабельном режиме, вызывая pthread_mutexattr_settype(Attr, PTHREAD_MUTEX_RECURSIVE).

Итак,Ответ на ваш вопрос заключается в том, что TMutex является вновь поступающим.

...