7.5.2 Objetos RLock (cerrojos reentrantes)

Un cerrojo reentrante es una primitiva de sincronización que puede ser adquirida múltiples veces por el mismo hilo. Internamente, utiliza los conceptos de ``hilo propietario'' y ``nivel de recursión'' además del estado bloqueado/desbloqueado utilizado por los cerrojos primitivos. En el estado de bloqueo, algún hilo posee el cerrojo; en el estado de desbloqueo, no pertenece a nadie.

Para bloquear el cerrojo, el hilo llama a su método acquire(), que retorna cuando el hilo posee el cerrojo. Para desbloquearlo, el hilo llama a su método release(). Se pueden anidar las llamadas a acquire()/release(). Sólo la última llamada a release() (es decir, la release() del par de llamadas exteriores) devuelve el cerrojo al estado de desbloqueo y permite que otras llamadas que estén esperando en acquire() prosigan.

acquire ([blocking = 1])
Adquirir un cerrojo, bloqueando o sin hacerlo.

Si se invoca sin argumentos: Si el hilo ya posee el cerrojo, incrementar el nivel de recursión en uno y retornar de inmediato. En caso contrario: Si otro hilo posee el cerrojo, esperar hasta que el cerrojo se desbloquee. Una vez liberado el cerrojo (cuando no pertenezca a ningún hilo), tomar posesión, establecer el nivel de recursión a uno y retornar. Si hay más de un hilo bloqueado esperando a que se desbloquee el cerrojo, sólo uno de ellos será capaz de tomar posesión del cerrojo. No hay valor de retorno en este caso.

Si se invoca con el argumento blocking a verdadero, hacer lo mismo que cuando se llama con argumentos y devolver verdadero.

Si se invoca con el argumento blocking a falso, no esperar. Si la llamada sin argumentos quedaría a la espera, devolver falso de inmediato. En caso contrario, hacer lo mismo que si se llama sin argumentos y devolver verdadero.

release ()
Liberar un bloqueo, decrementando el nivel de recursión. Si tras el decremento el nivel se hace cero, reponer el cerrojo a desbloqueado (sin hilo que lo posea) y, si hay otros hilos esperando a que el cerrojo se desbloquee, permitir que exactamente uno de ellos prosiga. Si tras decrementar el nivel de recursión sigue siendo superior a cero, el cerrojo sigue bloqueado y su propiedad sigue siendo del hilo llamante.

Sólo se debe llamar a este método desde el hilo que posee el cerrojo. No se debe llamar a este método si el cerrojo se halla desbloqueado.

No hay valor de retorno.


Ver Sobre este documento... para obtener información sobre sugerencias.