Recuperacion Segundo Examen
-
Upload
luis-alfredo -
Category
Documents
-
view
152 -
download
0
Transcript of Recuperacion Segundo Examen
-
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA FACULTAD DE CIENCIAS DE LA COMPUTACION PROGRAMACION CONCURRENTE Y PARALELA
RECUPERACION SEGUNDO EXAMEN
Nombre del Estudiante: Luis Alfredo Martinez Reyes Matricula :201100745
Seccin:_____________
1. Contesta las siguientes preguntas a) Explica la diferencia del funcionamiento y estructura entre un monitor y
semforo. Los monitores son una construccin concurrente, diseada para resolver el problema de la exclusin mutua, contiene los datos y procedimientos necesarios para la asignacin de un recurso compartido y son llamados por los procesos, por otra parte un semforo es un tipo de variable que obtiene una seal que detiene un proceso hasta que reciba otra seal especfica.
b) Qu es un socket y explica los tipos de sockets que se pueden utilizar en Java?
Sockets Stream (TCP, Transport Control Protocol) Son un servicio orientado a conexin donde los datos se transfieren sin encuadrarlos en registros o bloques. Si se rompe la conexin entre los procesos, stos sern informados. Sockets Datagrama (UDP, User Datagram Protocol) Son un servicio de transporte sin conexin. Son ms eficientes que TCP, pero no est garantizada la fiabilidad. Los datos se envan y reciben en paquetes, cuya entrega no est garantizada. Los paquetes pueden ser duplicados, perdidos o llegar en un orden diferente al que se envi. Sockets Raw Son sockets que dan acceso directo a la capa de software de red subyacente o a protocolos de ms bajo nivel. Se utilizan sobre todo para la depuracin del cdigo de los protocolos.
-
2. Resuelve el siguiente problema utilizando monitores en Java (4 puntos)
Suponga que se tiene dos procesos que cooperan entre si un productor y consumidor donde el productor le enva una lista de nmeros aleatorios y el consumidor solo consumir los nmeros impares mostrndolos cada uno y su suma final.
public class Monitor_Examen { public int numero; private boolean disponible = false; public synchronized int get() { while (disponible == false) { try { wait(); } catch (InterruptedException e) { } } disponible = false; notify(); return numero; } public synchronized void put(int valor) { while (disponible == true) { try { wait(); } catch (InterruptedException e) { } } numero = valor; disponible = true; notify(); } } class Productor extends Thread { private Monitor_Examen monitor1; private int num; public Productor(Monitor_Examen m, int num1){ monitor1 = m;
-
this.num = num1; } public void run() { for (int i = 0; i < 10; i++) { int x; x=((int)(Math.random() * 100)); System.out.println("Numero generado"+x); monitor1.put(x); System.out.println("Productor #"+this.num+" pone: "+x); try { sleep((int)(Math.random() * 100)); } catch (InterruptedException e) { } } } } class Consumidor extends Thread { private Monitor_Examen monitor1 ; private int num,suma=0; public Consumidor(Monitor_Examen m, int num1){ monitor1 = m; this.num = num1; } public void run() { int valor = 0; for (int i = 0; i < 10; i++){ valor = monitor1.get(); if((valor%2)!=0){ System.out.println("Consumidor #"+this.num+" obtinene:"+valor); suma=suma+valor; } else System.out.println("Numero par:"+valor); } System.out.println("Suma:"+suma); } } class Examen
-
{ public static void main(String args[ ] ) { int numero=1; Monitor_Examen m = new Monitor_Examen( ); Productor P1= new Productor (m, numero); Thread H1= new Thread(P1); H1.start(); Consumidor C1=new Consumidor(m,numero); Thread H2 = new Thread(C1); H2.start(); } }
-
3. Resuelve el siguiente problema utilizando sockets en Java (4 puntos)
Una empresa recibe sus pedidos de sus clientes, suponga que 10 clientes requieren enviar su pedido al vendedor (servidor) y a su vez les envi un mensaje de confirmacin de que ya recibi su solicitud y el total a pagar de acuerdo al nmero de productos solicitados y no pueda atender a ms de 4 clientes, lo cual deber indicar a los dems clientes que esperen su turno para ser atendidos.
//Cliente
import java.io.*; import java.net.*; class Cliente { static final String HOST = "192.168.1.7"; static final int Puerto=5000; public Cliente( ) { try{ Socket skCliente = new Socket( HOST , Puerto ); InputStream aux = skCliente.getInputStream(); OutputStream aux2 = skCliente.getOutputStream(); DataInputStream flujo = new DataInputStream( aux ); DataOutputStream flujo2= new DataOutputStream( aux2 ); flujo2.writeUTF( "Solicitando Pedido"); System.out.println( flujo.readUTF() ); skCliente.close(); } catch( Exception e ) { System.out.println( e.getMessage() ); } } public static void main( String[] arg ) { for(int i=0;i
- import java.io.* ; import java.net.* ; class Servidor { static final int PUERTO=5000; int Ncli=0, Total=0; public Servidor( ) { try { ServerSocket skServidor = new ServerSocket( PUERTO ); System.out.println("Escucho el puerto " + PUERTO ); for ( Ncli = 0; Ncli < 10; Ncli++ ) { while(Ncli