Sobes.tech
Junior — Middle

Spiega le differenze tra i meccanismi Semaphore e Mutex nel contesto della gestione dell'accesso alle risorse

sobes.tech AI

Risposta dell'AI

Semaphore e Mutex sono meccanismi di sincronizzazione utilizzati per gestire l'accesso alle risorse, ma differiscono per scopo e comportamento:

  • Mutex (esclusione mutua) è un primitive che permette a un solo thread di possedere una risorsa alla volta. Garantisce accesso esclusivo. Se un thread ha bloccato il mutex, gli altri aspetteranno che venga rilasciato.

  • Semaphore (contatore di permessi) è un meccanismo più generale che contiene un contatore che determina quanti thread possono accedere contemporaneamente a una risorsa. Ad esempio, un semaforo con un contatore di 3 permetterà a tre thread di lavorare con la risorsa contemporaneamente.

Esempio in C#:

// Mutex
Mutex mutex = new Mutex();

mutex.WaitOne(); // acquisire mutex
// sezione critica
mutex.ReleaseMutex(); // rilasciare

// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // massimo 3 thread

semaphore.WaitOne(); // acquisire permesso
// sezione critica
semaphore.Release(); // rilasciare permesso

In sintesi:

  • Mutex — per accesso esclusivo a una risorsa.
  • Semaphore — per limitare il numero di accessi simultanei.

Questa è la differenza chiave nella scelta di un meccanismo di sincronizzazione.