Está en la página 1de 7

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 :201100745 Seccin:_____________ Matricula

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<=9;i++) { Cliente C=new Cliente(); } } }

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<=3) { // Crea objeto //System.out.println("Sirvo al cliente " + numCli); Socket skCliente = skServidor.accept(); OutputStream aux = skCliente.getOutputStream(); DataOutputStream flujo= new DataOutputStream( aux ); flujo.writeUTF( "Hola cliente " + Ncli ); InputStream aux2 = skCliente.getInputStream(); DataInputStream flujo2= new DataInputStream( aux2 ); System.out.println( flujo2.readUTF()+" Cliente: "+Ncli ); skCliente.close(); Ncli++; Total++; } Socket skCliente = skServidor.accept(); OutputStream aux = skCliente.getOutputStream(); DataOutputStream flujo= new DataOutputStream( aux ); flujo.writeUTF( "Espere Cliente " + Ncli ); } // skCliente.close(); } catch( Exception e ) { System.out.println( e.getMessage() ); } System.out.println("Demasiados clientes por hoy"); System.out.println("Total de clientes atendidos: "+Total); } public static void main( String[] arg ) { new Servidor(); } }

También podría gustarte