¿Puede TCriticalSection.Acquire ser llamado con seguridad más de una vez por un hilo?

En la plataforma Windows, TCriticalSection se implementa llamando a la API de Windows EnterCriticalSection / LeaveCriticalSection. La documentación de Microsoft dice explícitamente que después de que un hilo tenga propiedad de una sección crítica, puede hacer llamadas adicionales a EnterCriticalSection.

Hasta aquí todo bien.

Pero ¿qué pasa con el comportamiento de las otras plataformas que soporta Delphi como OSX, iOS y Android?

Otras plataformas parece hacer uso de TMonitor. Así que la pregunta podría ser reescrito contra TMonitor.

La implementación de TCriticalSection bajo otras plataformas que Windows simplemente usa TMonitor. Así que la respuesta a su pregunta se reduce al comportamiento de TMonitor.Enter. Al menos la documentación indica que TMonitor.Enter es reentrante.

Esta parte de la documentación significaría un "sí" a su respuesta:

Prohíbe el acceso de todos los otros subprocesos pero el llamante al objeto especificado.

La parte de código relevante de TMonitor está en TMonitor.TryEnter:

function TMonitor.TryEnter: Boolean; begin if FOwningThread = GetCurrentThreadId then // check for recursion begin ... Result := True; ... 
  • La instalación de Android Studio SDK falló en Mac OS X
  • Cocos2d-x android no puede resolver la biblioteca coscos2dx
  • Cómo llegar a la línea de comandos de Eclipse
  • Adb en OSX Lion, pero no puede conectarse a la pestaña galaxia 10.1, pero funciona bien en linux
  • Android File Transfer no puede ver una carpeta creada por la aplicación
  • No hebreo en la emulación de OS X Android
  • Eclipse se bloquea en el SDK Content Loader de Android
  • Emulador de Android laggy en Mac
  • / Dev / HAX falta cada vez que reinicio mi equipo
  • Instalación de ADB en MAC OS X
  • ADB no reconoce Nexus S en Mac 10.6
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.