Vortex Library: Soporte de mutex recursivos y no recursivos

Recientemente, uno de nuestros clientes nos notificó que el funcionamiento del API de mutex proporcionada por Vortex Library no era consistente en Microsoft Windows comparado con Linux. Efectívamente, tras unas comprobaciones, el API:

vortex_mutex_create (&mutex);

..crea un mutex no recursivo en Linux, mientras que para Windows, creaba un mutex recursivo.

La diferencia es importante: el mutex recursivo puede ser llamado sin causar un dead-lock por el mismo thread que ya posea el lock/mutex, al contrario que el no recursivo, que causará un dead-lock.

Obviamente hay preferencias sobre el diseño, y definitivamente el diseño del mutex recursivo permite hacer código más sencillo (por ejemplo, llamadas recursivas). Sin embargo, no es el API que se espera en el entorno POSIX, donde la implementación “natural” es que un lock no puede ser llamado por segunda vez sin antes llamar a “unlock”.

Con este punto de partida, hemos actualizado la implementación de Vortex Library (http://aspl.es/vortex) para permitir tener los dos estilos, asegurando que el API por defecto, crea mutexes no recursivos en todas las plataformas (de manera que el API sea consistente).

Ahora, si necesitas crear un Mutex recursivo, puedes usar:

vortex_mutex_create_full (&mutex, VORTEX_MUTEX_CONF_RECURSIVE);

…mientras que si se llamara a lo siguiente, se creará un mutex no recursivo en cualquier plataforma:

vortex_mutex_create (&mutex);
0
  Posts relacionados
  • No related posts found.