elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Problema de los átomos - Concurrencia
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema de los átomos - Concurrencia  (Leído 2,220 veces)
amgarciac

Desconectado Desconectado

Mensajes: 19


Ver Perfil
Problema de los átomos - Concurrencia
« en: 3 Marzo 2016, 16:43 pm »

Supongamos que tenemos un sistema compuesto por infinitas unidades de átomos de
hidrógeno y oxígeno, que lo único que quieren hacer es combinarse para formar moléculas de agua.

Para ello dispondremos de una clase denominada Aire, que recibirá peticiones de los átomos mediante un método denominado combinar (id), donde id nos dirá si lo que quiere combinarse es un átomo de oxígeno o de hidrógeno.

- Cuando un átomo quiere combinarse hay que comprobar si ya existen otros 2 átomos
complementarios. En ese caso, la molécula se forma.
- Si no están todavía sus otros 2 átomos complementarios, entonces debe bloquearse y
esperar a que lleguen los 2 que faltan o el que falta. Sólo cuando lleguen los que faltan
entonces pueden seguir los tres átomos.
- Los átomos que llegan pero no pueden formar molécula porque ya hay uno (en el caso
del oxígeno

Para resolver dicho problema, he desarrollado así la clase Aire:

Código:

public class Aire {

int atomosHidrogeno = 0;
int atomosOxigeno = 0;
int atomosH_esperando;
int atomosO_esperando;

public Aire(int atH, int atO2) {
this.atomosHidrogeno = atH;
this.atomosOxigeno = atO2;
this.atomosH_esperando = 0;
this.atomosO_esperando = 0;
}

public void combinar(int id) {
if (id == 0) // Hidrogeno
{
synchronized (this) {
while (this.atomosH_esperando == 2 || (this.atomosHidrogeno < 1 && this.atomosOxigeno < 0)) {
try {
wait();
this.atomosH_esperando++;
} catch (InterruptedException ie) {
}
}
notify();
}
this.atomosH_esperando--;
System.out.println("Molécula formada");
} else if (id == 1) // Oxigeno
{
synchronized (this) {
while (this.atomosH_esperando == 2 || (this.atomosHidrogeno < 2)) {
try {
wait();
this.atomosO_esperando++;
} catch (InterruptedException ie) {
}
}
notify();
}
this.atomosO_esperando--;
System.out.println("Molécula formada");
}
}
}

MI PROBLEMA ES QUE SIEMPRE HAY ÁTOMOS SUFICIENTES PARA TODAS LAS MOLÉCULAS, PONGA LO QUE PONGA

(Sinceramente, soy novato en concurrente y...)


En línea

Lekim

Desconectado Desconectado

Mensajes: 268



Ver Perfil
Re: Problema de los átomos - Concurrencia
« Respuesta #1 en: 10 Marzo 2016, 21:26 pm »

Supongamos que tenemos un sistema compuesto por infinitas unidades de átomos de
hidrógeno y oxígeno,...
...
MI PROBLEMA ES QUE SIEMPRE HAY ÁTOMOS SUFICIENTES PARA TODAS LAS MOLÉCULAS, PONGA LO QUE PONGA

(Sinceramente, soy novato en concurrente y...)

...un sistema compuesto por infinitas unidades de átomos de
hidrógeno y oxígeno..
lógico...
.... SIEMPRE HAY ÁTOMOS SUFICIENTES ...

Tienes que crear variables a modo de BOMBOS, en lugar de bolas (átomos) introduces una cantidad
H= 20
O= 10
OH= 0
H2O=0

Ahora:
...Solo cuando H> 2 y  O>0 --> H2 + O-->H2O
...si se unen H2 y O entonces  H= H-2; O= O-1; H2O= H2O + 1

...ahora:
H=18
O=9
H2O=1


Para el caso de moléculas incompletas...

...Solo cuando H> 0 y O>0  -->O + H -> OH+ (hidróxido)
...si se forma OH entonces
H= H-1
O= O-1
OH= OH+1

...ahora:
H=17
O=8
OH=1


Para el caso de OH + H

...Solo cuando H>0 y OH>0  -->  H + OH+ --> H2O
...si se unen (H + OH ) entonces
OH= OH-1
H= H-1
 H2O=H2O+1

...ahora:
OH=0
 H=16
H2O= 2


No programo en C así que, lo siento, pero espero que la lógica que planteo sirva.



Sl2s


Hace tiempo que estudié química en bachillerato y bueno ya no recuerdo mucho. Esto no es tan simple como esto, ya que también se puede formar H3O, supongo que según condiciones temperatura, presión y esas cosas.  La cosa iba por moles, masa... 2H2 + O2  --> 2 H2O representa dos moles de H2 y uno de O2. Es decir y espero no equivocarme... par cada mol de O2 se necesitan dos moles de H2 para formar 2 moles de H2O.
Supongo que el problema no se plantea desde un punto de vista estequiométrico si no que se trata de reproducir la reacción virtualmente.

Además el oxígeno en condiciones normales forma moléculas O2, es decir, creo que sería incorrecto poner

O  + OH --> H2O
 
Creo que debería ser

2 H2 +  O2 --> 2 H2O

Así que tendrías que partir de moléculas de O2 y H2 y no de átomos libres.

A ver si contesta alguien que sepa más del tema y como aplicarlo al problema que planteas

S2s





« Última modificación: 11 Marzo 2016, 00:54 am por Lekim » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Logran crear un transistor compuesto por sólo siete átomos
Noticias
wolfbcn 3 2,098 Último mensaje 26 Mayo 2010, 20:21 pm
por Randomize
Concurrencia sobre dll externa
.NET (C#, VB.NET, ASP)
Lopardo 4 5,107 Último mensaje 27 Febrero 2011, 15:50 pm
por [D4N93R]
IBM consigue reducir la cantidad de átomos en memorias de millones a 12
Noticias
wolfbcn 0 1,701 Último mensaje 13 Enero 2012, 14:28 pm
por wolfbcn
Concurrencia y bloqueos en aplicaciones
Bases de Datos
Hadess_inf 0 2,294 Último mensaje 2 Octubre 2013, 03:55 am
por Hadess_inf
Concurrencia en java
Java
josevc 2 2,463 Último mensaje 4 Enero 2016, 13:52 pm
por josevc
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines