Sobes.tech
Junior — Middle

Qual è la differenza tra il meccanismo di mutua esclusione Lock e Semaphore nella gestione dell'accesso alle risorse?

sobes.tech AI

Risposta dell'AI

Lock (mutua esclusione) e Semaphore (semaforo) sono meccanismi di sincronizzazione, ma differiscono per funzionalità e applicazione:

  • Lock (Mutex)

    • Progettato per garantire accesso esclusivo a una risorsa.
    • Solo un thread può possedere il Lock in un dato momento.
    • Se il Lock è occupato, altri thread attendono che venga rilasciato.
    • Utilizzato per proteggere sezioni critiche.
  • Semaphore

    • Ha un contatore che determina quanti thread possono accedere contemporaneamente alla risorsa.
    • Può consentire l'accesso a più thread contemporaneamente (ad esempio, un semaforo con contatore 3 permette a 3 thread di accedere simultaneamente).
    • Utilizzato per gestire l'accesso a risorse limitate.

Esempio in C#:

// Mutex
Mutex mutex = new Mutex();
mutex.WaitOne(); // acquisizione
// sezione critica
mutex.ReleaseMutex(); // rilascio

// Semaphore
Semaphore semaphore = new Semaphore(3, 3); // massimo 3 accessi simultanei
semaphore.WaitOne();
// lavoro con la risorsa
semaphore.Release();

Pertanto, Lock è un caso particolare di semaforo con un contatore massimo di 1.