代码之家  ›  专栏  ›  技术社区  ›  RBA

TMUTEX在德尔福重新进入市场吗?

  •  3
  • RBA  · 技术社区  · 6 年前

    我正在创建互斥体:

     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 回复  |  直到 6 年前
        1
  •  9
  •   David Heffernan    6 年前

    TMutex 在基础平台对象上实现。在作为互斥对象的Windows上。在其他平台上是pthread mutex。

    你的问题是 TutMeX 是可重入的。反过来,答案取决于底层平台对象是否是可重入的。Windows mutex始终是可重入的,pthread mutex是可选的可重入的,delphi TutMeX 代码通过调用 pthread_mutexattr_settype(Attr, PTHREAD_MUTEX_RECURSIVE) .

    所以,你的问题的答案是 TutMeX 是可重入的。