..
Podemos pensar en una base de datos compartidos como cualquier otra información de las tareas de procesamiento de estar expuestos a más partes. Imagine, por ejemplo, almacenar en un valor de la variable numérica que representa el euro / dólar. Tenemos un programa que comprueba periódicamente que el tipo de cambio y actualiza el valor de la variable. Uno o más programas de otros, sin embargo, el uso de la información actualizada para operar en el tipo de cambio precio de conversión.
Observe cómo la gestión de una responsabilidad compartida, incluso en este sencillo ejemplo, necesitan una atención especial. Imagine por ejemplo que mientras que una aplicación necesita leer el tipo de cambio para convertir, también se recibe por otro programa, una solicitud para cambiar el tipo de cambio en sí.
Que se ejecuta por primera vez? Que la conversión del tipo de cambio se hace? El problema, incluso en algunos casos un poco más complejo, podría ser aún más graves.
Imagínese que la variable de interés no es elemental, pero, por ejemplo, consiste de un conjunto de datos. Ahora sólo podrán ser realizados escritura parcial, a continuación, seguida de una lectura a partir de la finalización de la redacción. Las transacciones entonces se llevaría a cabo con un conjunto de valores que han cambiado sólo en parte, dando lugar a resultados sin sentido y por lo tanto inaceptable.
Dada la existencia de este tipo de problemas de muchos lenguajes de programación proporcionan herramientas específicas para el manejo de las variables compartidas. Examinamos a continuación, en particular, ya que esta categoría de problemas se manejan en el lenguaje de programación Java, uno de los más utilizados de todos.
En primer lugar, necesitamos entender cómo podemos asegurarnos de que sólo un programa a la vez, o más precisamente, sólo un hilo a la vez (un hilo es el componente básico de un proceso o programa, en otras palabras, un programa puede constar de varios subprocesos, ejecutar de forma simultánea) se puede acceder a una variable compartida. El mecanismo que nos permite ofrecer esta garantía se denomina exclusión mutua.
La exclusión mutua
Imaginar el desarrollo de una clase (o un conjunto de datos y métodos, es decir, funciones útiles para procesar los datos en sí) llamado Variabile_Condivisa estructurado de la siguiente manera:
public class Variabile_Condivisa
{
euro_dollaro float;
euro_sterlina float;
Variabile_Condivisa ()
{
euro_dollaro = 1;
euro_sterlina = 1;
}
vacío set_euro_dollaro (float e_d) = {euro_dollaro e_d;}
vacío set_euro_sterlina (float e_s) = {euro_sterlina e_s;}
flotan get_euro_dollaro () {return euro_dollaro;}
flotan get_euro_sterlina () {return euro_sterlina;}
}
Las dos declaraciones, y que euro_sterlina euro_dollaro, lo que representa el tipo de cambio euro / dólar y euro / libra esterlina y que queremos compartir la información entre varios programas (o entre varios subprocesos).
Los métodos desarrollados permiten asignar un valor a estos datos (y set_euro_dollaro set_euro_sterlina) y leer los valores (y get_euro_dollaro get_euro_sterlina).
A continuación, identificamos un método en particular (Variabile_Condivisa), que se llama al constructor de clase se ejecuta y que la creación de cada Variabile_Condivisa, en este caso mediante el establecimiento de los valores de las variables y euro_sterlina euro_dollaro se establece en 1.
Entonces se crea en nuestro programa de un tipo de objeto llamado var Variabile_Condivisa (la clase representa un conjunto de entidades con características comunes, mientras que un objeto representa un elemento específico de este conjunto, que se puede hacer referencia dentro del programa ) de esta manera:
Variabile_Condivisa Variabile_Condivisa var = new ();Ya que ahora podemos asegurar que no hay problemas en la gestión de los datos compartidos var? El lenguaje Java proporciona la palabra clave (o palabras clave) sincronizado, que acepta cualquier objeto como un parámetro. A través de sincronización, se puede definir, como se muestra en el ejemplo, el bloque de código:
sincronizado (var)
{
/ / Sincronizado bloque de código delimitado (var)
}
Antes de realizar las instrucciones en el bloque sincronizado, cualquier tema adquiere la cerradura de la variable var, o bloquear el acceso a más del mismo bloque de código hasta que se libere el bloqueo, o hasta que después de ejecutar todo el bloque ejemplo de código delimitados por llaves.
En otras palabras, el primer hilo (que imaginamos que la primera llamada) que realiza la declaración sincronizado (var) en realidad crea una barrera que impide que cualquier otro hilo para ejecutar la sentencia sincronizada (var) hasta que el primero no ha terminado la ejecución del bloque sincronizado de código delimitado. En estos bloques se insertan las instrucciones de lectura o escritura de datos compartidos.
De esta manera se garantiza la exclusión mutua, lo que asegura que sólo un hilo a la vez puede acceder a una variable compartida. Cabe señalar, sin embargo, que es necesario elegir cuidadosamente el objeto que se pasa como un parámetro de sincronización. Tiene que ser un objeto común a todos los temas en los que desea crear un mecanismo de exclusión mutua, por ejemplo, como en este caso, la variable que desea leer o editar.
Imagínese, en este momento, desea establecer nuestro programa para que los hilos que quieran leer el valor de la variable var se pondrá en espera y evaluar los resultados sólo después de la primera actualización después de su solicitud. Imagine que desea definir un mecanismo de sincronización entre la lectura y la escritura.
| |
Linux (Curso)
Guía completa de código abierto del sistema. A partir de 49 €. |
| |
PHP (Curso)
Ciclo completo para la creación de sitios Web dinámicos. A partir de 49 €. |
| |
Ruby y Ruby on Rails (Curso)
Crear aplicaciones de software y la Web con Ruby y RoR. A partir de 39 €. |