Lock
Da Wikipedia, l'enciclopedia libera.
![]() |
Questa voce riguardante un argomento di informatica non è ancora stata tradotta completamente dalla lingua inglese. Terminala o riscrivila tu.
Nota: il testo da tradurre potrebbe essere nascosto: vai in modifica per visualizzarlo. |
In informatica un lock (inglese per «blocco») è un meccanismo di sincronizzazione per limitare l'accesso ad una risorsa condivisa in un ambiente multitasking ad un solo thread o ad un solo tipo di thread alla volta.
Concettualmente un lock è un oggetto di cui un thread deve venire in possesso prima di poter procedere all'esecuzione di una sezione protetta di un programma. Ci sono regole prestabilite che dispongono il possesso di un lock. Nel caso più elementare il lock può essere assegnato ad un solo thread; in altri casi il possesso può coinvolgere in modo esclusivo più thread di lettura oppure un solo thread di scrittura (lock read/write). In ogni caso, se un thread non può acquisire immediatamente il lock deve aspettare che questo diventi libero oppure abbandonare la sezione protetta.
Le implementazioni dei mutex nei monitor di sincronizzazione fanno generalmente uso di lock.
[modifica] Problemi con i lock
I sistemi di protezione e i meccanismi di sincronizzazione di thread e processi se basati sui lock hanno molti svantaggi:
- É un meccanismo di bloccaggio, il che vuol dire che thread e processi devono aspettare fin quando il lock non viene rilasciato.
- Usare i lock è un approccio conservativo, perché ogni thread deve acquisire il lock ogni qualvolta che vi è una possibilità di conflitto, che è situazione abbastanza rara nelle esecuzioni reali. Un approccio conservativo abitualmente induce un overhead non necessario.
- I lock sono vulnerabili a insuccessi e a difetti. Se un thread che detiene un lock muore, gli altri thread che aspettano il rilascio del lock possono aspettare per sempre.
- La programmazione con l'uso di lock è incline ad errori, come i noti deadlock.
- Inversione di priorità. Thread o processi con una priorità alta non possono procedere se un thread o un processo detiene un lock comune.
- Debug difficile: i bug associati ai lock dipendono da una specifica esecuzione ed è difficile che si ripetano.
Una strategia è quella di evitare di usare i lock, usando un metodo di sincronizzazione che non blocca il processo, come la tecnica ci programmazione lock-free o la transactional memory.
[modifica] La keyword lock
Nel linguggio di programmazione C# la keyword lock può essere usata per assicurarsi che un blocco di codice possa essere eseguito senza alcuna interruzione da parte di altri thread, come la keyword synchronized in Java.