2012-08-06 14 views

Respuesta

254

escribí esta respuesta hacia abajo porque pensé que esto sería un divertido (y apropiado) analogía:

Piense en un objeto con llave como pizarra (bloqueable) en una sala de clase que contiene un profesor (escritor) y muchos estudiantes (lectores).

Mientras que un profesor está escribiendo algo (bloqueo exclusivo) de la placa:

  1. Nadie puede leerlo, ya que todavía está siendo escrito, y que está bloqueando la vista =>Si un objeto está bloqueado exclusivamente , los bloqueos compartidos no se pueden obtener.

  2. Otros maestros no se van a plantear y empezar a escribir bien, o la junta se vuelve ilegible, y confunde a los estudiantes =>Si un objeto está bloqueado exclusivamente, otros bloqueos exclusivos que no se pueden obtener.

Cuando los estudiantes están leyendo (bloqueos compartidos) ¿Cuál es en la pizarra:

  1. Todos ellos pueden leer lo que está en ella, junto =>múltiples bloqueos compartidos pueden coexistir .

  2. El maestro espera a que termine la lectura antes de que borra la pizarra para escribir más =>Si ya existen bloqueos de uno o más compartidos, los bloqueos exclusivos que no se pueden obtener.

+5

Gran analogía capturando la abstracción muy de cerca (¡las analogías que no sobrepasan son raras!). ¡Gracias! –

+1

muy buena explicación. Sin embargo, el PO preguntó sobre el * origen * de las denominaciones "compartidas" y "exclusivas", no a una explicación de las termias per se. – serhio

+7

¿Por qué gente como ArjunShankar no escribe libros? Una explicación muy interesante y comprensible. – user3388473

15

Es bastante sencillo. Los bloqueos de lectura también se conocen como bloqueos compartidos porque más de un proceso puede leer al mismo tiempo. El objetivo de un bloqueo de lectura es evitar la adquisición por otro proceso de un bloqueo de escritura. Por el contrario, un bloqueo de escritura inhibe todas las demás operaciones mientras se completa una operación de escritura, por lo que se describe como exclusivo.

Por lo que un bloqueo de lectura dice "puede leer ahora pero si desea escribir tendrá que esperar", mientras que un bloqueo de escritura dice "tendrá que esperar".


Me doy cuenta de que está investigando en apoyo de sus estudios, pero no puedo resistir la tentación de dar una conferencia.

El uso incompetente del bloqueo es una causa principal de dolores de cabeza de rendimiento. El uso de un sistema de bloqueo que diferencie las cerraduras de lectura y escritura es un buen comienzo, pero un diseño cuidadoso a veces puede eliminar gran parte de la necesidad de bloqueo. Por ejemplo, el estado de la sesión debe nunca mantenerse en una colección global por elemento de estado.

De hecho, he visto esto hecho. Es un diseño atroz, que causa el boxeo y un cambio en una colección para cada cambio en el estado de la sesión, lo que implica un bloqueo de escritura prolongado. Los gastos generales fueron paralizantes, reduciendo de forma efectiva el comportamiento del servidor a un solo subproceso.

Simplemente agregando todo el estado de la sesión en una estructura fue una gran mejora. Los cambios en el estado de la sesión simplemente cambiaron los valores de los miembros de la estructura de estado de una sesión. Como ninguna otra sesión tenía la oportunidad o la oportunidad de hacer referencia directa al estado de una sesión, la única colección que se actualizaba era la lista de sesiones. Como resultado, el bloqueo era completamente innecesario durante un sesssion, sólo al principio y al final, y el rendimiento aumentó en un factor de 3000.

El otro escenario de bloqueo común se comparte recursos entre los hilos de una aplicación de usuario. La mayoría de los marcos modernos abordan esto usando mensajes en lugar de bloqueos; cuando "realiza la transición al subproceso de IU", en realidad está haciendo cola con un mensaje que contiene un puntero de función y algunos parámetros (o un delegado y un marco de pila según la implementación).

2
  • Un bloqueo exclusivo o de escritura brinda acceso exclusivo a un proceso para escribir en la parte especificada del archivo. Mientras hay un bloqueo de escritura, ningún otro proceso puede bloquear esa parte del archivo.

  • Un bloqueo compartido o de lectura impide que cualquier otro proceso solicite un bloqueo de escritura en la parte especificada del archivo. Sin embargo, otros procesos pueden solicitar bloqueos de lectura.

Más sobre esto: http://www.gnu.org/software/libc/manual/html_node/File-Locks.html

0

Principio mismo en el lado de la base de datos también. Según la documentación de Oracle

El modo de bloqueo exclusivo evita que se comparta el recurso asociado. Este modo de bloqueo se obtiene para modificar los datos. La primera transacción para bloquear un recurso exclusivamente es la única transacción que puede alterar el recurso hasta que se libere el bloqueo exclusivo.

El modo compartir bloqueo permite compartir el recurso asociado, dependiendo de las operaciones involucradas. Múltiples usuarios que leen datos pueden compartir los datos, manteniendo bloqueos compartidos para evitar el acceso simultáneo de un escritor (que necesita un bloqueo exclusivo). Varias transacciones pueden
adquirir bloqueos de acciones en el mismo recurso.

Cuestiones relacionadas