¿Cuál es la diferencia entre un semáforo y un mutex?
sobes.tech AI
Respuesta de la IA
El mutex (Mutex, Exclusión Mutua) es un mecanismo de sincronización que garantiza que en un momento dado solo un hilo tenga acceso a la sección crítica del código o recurso. Funciona bajo el principio de propiedad: el hilo que bloquea el mutex debe liberarlo.
El semáforo (Semaphore) es un mecanismo de sincronización más general que controla el acceso a un recurso limitado por una cierta cantidad de "permiso". Los hilos pueden obtener permiso si está disponible y continuar con la ejecución. Cuando el recurso ya no es necesario, el permiso se devuelve. El semáforo no tiene concepto de propiedad; cualquier hilo puede incrementar el contador del semáforo.
Diferencias clave:
- Propósito: El mutex se usa para acceso exclusivo (un hilo), el semáforo para gestionar el acceso a un grupo limitado de recursos (varios hilos hasta el límite).
- Propiedad: El mutex tiene un propietario (el hilo que lo bloqueó). El semáforo no tiene propietario.
- Contador: El mutex puede considerarse como un semáforo con contador igual a 1. El semáforo puede tener un contador mayor a 1.
- Operaciones: Mutex:
WaitOne/Pulse/ReleaseMutex. Semáforo:WaitOne/Release.
Aquí hay un ejemplo simple de uso de semáforo en C#:
// Crear un semáforo con valor inicial 2 y máximo 2.
// Permite que hasta 2 hilos accedan al recurso simultáneamente.
SemaphoreSlim semaphore = new SemaphoreSlim(2, 2);
// El hilo intenta acceder al recurso
semaphore.WaitOne();
// ... trabajo con el recurso ...
semaphore.Release(); // Liberar permiso
Ejemplo de mutex:
// Crear un mutex
Mutex mutex = new Mutex();
// El hilo intenta obtener acceso exclusivo
mutex.WaitOne();
// ... trabajo con la sección crítica ...
mutex.ReleaseMutex(); // Liberar el mutex (solo el propietario puede)