Exclusiones mutuas y hebras

Una exclusión mutua (mutex) se utiliza de forma cooperativa entre hebras para asegurarse de que solo una de las hebras que cooperan puede acceder a los datos o ejecutar determinado código de aplicación a la vez.

La palabra mutex es abreviatura para un objeto primitivo que proporciona MUTual EXclusion entre hebras. A los efectos de esta introducción, puede pensar que los mutexes son similares a las secciones y monitores críticos.

Normalmente, el mútex se asocia lógicamente con los datos que protege la aplicación. Por ejemplo, PAYROLL DATA tiene asociado un PAYROLL MUTEX. El código de aplicación siempre bloquea PAYROLL MUTEX antes de acceder a los PAYROLL DATA. El mutex impide el acceso a los datos por parte de una hebra sólo si dicha hebra utiliza el mutex antes de acceder a los datos.

Crear, bloquear, desbloquear y destruir son operaciones que normalmente se realizan en un mútex. Cualquier hilo que bloquee correctamente el mutex se convierte en el propietario del mutex hasta que desbloquea el mutex. Cualquier hebra que intente bloquear el mutex más tarde tiene que esperar hasta que el propietario desbloquee el mutex. Cuando el propietario desbloquea el mutex, el control se devuelve a un hilo en espera con ese hilo convirtiéndose en el propietario del mutex. Sólo puede haber un propietario de un mutex a la vez.

Las operaciones de espera de mútex pueden ser recursivas. Un mutex recursivo permite al hilo propietario bloquear el mutex repetidamente. El propietario del mútex permanece igual hasta que el número de solicitudes de desbloqueo es igual al número de solicitudes de bloqueo satisfactorias. Las esperas de mútex pueden agotar el tiempo de espera después de una cantidad de tiempo especificada por el usuario, o volver inmediatamente si no pueden adquirir el bloqueo. Para obtener más información, consulte la documentación de la API sobre las primitivas de mútex disponibles para la aplicación.