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.