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.

Problemi con i lock

[modifica | modifica wikitesto]

I sistemi di protezione e i meccanismi di sincronizzazione di thread e processi se basati sui lock hanno molti svantaggi:

Una strategia è quella di evitare di usare i lock, usando un metodo di sincronizzazione che non blocca il processo, come la tecnica di programmazione lock-free o la transactional memory.

La keyword lock

[modifica | modifica wikitesto]

Nel linguaggio 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.

Voci correlate

[modifica | modifica wikitesto]

Altri progetti

[modifica | modifica wikitesto]
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica