VademécumVademécum\Cerrojo [lock] (concepto)

Cerrojo [lock] (concepto)

Es probablemente el mecanismo más básico para controlar qué cosas se pueden ejecutar en cualquier orden y qué cosas requieren una cierta disciplina.

Loa cerrojos delimitan una zona de código (ver zonas de exclusión mutua)

cerrojo.lock();

// zona protegida

cerrojo.unlock();

 

El cerrojo es propiedad de un solo thread en cada momento. Si un thread quiere hacerse con el cerrojo y lo tiene otro, espera a que lo libere.

Los cerrojos son mecanismos de sincronización de bajo nivel pues es fácil escribir programas erróneos con ellos.

Loa cerrojos dependen casi siempre de la buena voluntad de los threads que los usan: si un thread no se ajusta a la disciplina de adquirir el cerrojo antes de meterse en una zona crítica, pues los demás threads no pueden hacer nada por evitarlo. Es por ello que se recomienda fuertemente que las zonas críticas se encapsulen de forma que sea imposible acceder a su contenido sin control.

Igualmente hay que contar con el buen hacer de los threads que usan los cerrojos. Si un thread se olvida de liberarlo, queda cerrado. Por ejemplo, si salta una interrupción y el código de tratamiento no abre el cerrojo.

Ver “Lock”.

Ver “zonas de exclusión mutua”.

principio