Documentos de Académico
Documentos de Profesional
Documentos de Cultura
jvc93
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
1. Dado el siguiente programa escrito en java, indique qué salida proporcionar á.
public class inconcurrente extends Thread {
private static int n = 0;
private int nIter;
public incConcurrente(int v) {nIter=v;}
class Animal{
public void move(){
System.out.println("Los animales se mueven");
}
}
class Perro extends Animal{
public void move(){
System.out.println("Los perros andan y corren");
}
}
public class PruebaPerro{
public static void main(String args[]){
Animal a = new Animal();
Animal b = new Perro();
a.move();
b.move();
}
}
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-188990
3. Dado el siguiente programa escrito en java, indique qué salida produce.
Razone su respuesta.
import java.util.concurrent.locks.*;
public class examen implements Runnable{
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
public void run(){
Object q=p;
for(int cont=0;cont<vMax; cont++){
r.lock(); p++; r.unlock();
synchronized(q){try{q.wait();}
catch(InterruptedException e){}}}
}
Consigue tu certificado de inglés Aptis en un tiempo record y a un precio inmejoroable ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-188990
5. Describa el resultado de ejecutar el siguiente programa. Razone su respuesta.
import java.util.concurrent.*;
import java.util.concurrent.locks.*;
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
try{k.lock();
n++;
}finally{k.unlock();}
}
public static void main(String[] args) {
ThreadPoolExecutor tp= new ThreadPoolExecutor(10,10,2000L,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
tp.prestartAllCoreThreads();
ej1[] tareas = new ej1[5];
for(int k=0; k<tareas.length; k++){
tareas[k] = new ej1();
tp.execute(tareas[k]);
}
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos.
Através de la interfaz Runnable, se crea un objeto que implemente de la interfaz y se
redefine el método run. Para que actúe como hilo, la clase Thread posee un
constructor que genera un objeto de tipo Thread a partir de un Objeto Runnable. El
objeto Thread creado será nuestro hilo del objeto Runnable.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
un rango dado, y una solución muti-core al mismo que utiliza un
pool de Threads. Conforme aumen- tamos el tamaño del pool, el
tiempo de cálculo cambia de acuerdo a siguiente curva: [0.5
puntos]
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-188990
11. Considere el siguiente programa concurrente. Estudie su corrección total,
y diga si es o no totalmente correcto. Justifique su respuesta. [1 punto]
import java.util.concurrent.locks.*;
public class Correc extends Thread{
public static int nH = 10;
public static int n = 0;
public static ReentrantLock 1 = new ReentrantLock();
public Condition v;
public Correc() {v = 1.newCondition();}
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
public void run()
{
1.lock();try{
try{v.await();} catch(InterruptedException e){}
n++;
}finally {1.unlock();}
}
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
public void run(){
switch(t){
case 0:{try{cerrojo.acquire();}
catch(InterruptedException e){}
x++;cerrojo.release();}
case 1:{try{cerrojo.acquire();}
catch(InterruptedException e){}
x--;cerrojo.release();}
}
}
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Si p es el número de punto inscritos en el círculo dividido por el número de puntos
inscritos en el cuadrado, se sabe que PI=4xp y que a mayor número de puntos
generados se obtiene una aproximación a PI de mayor precisión. Se desea escribir un
programa multihebrado en Java que permita estimar PI con la precisión deseada. Para
ello, de determinar y explicar:
* ¿Qué coeficiente Cb de bloqueo cree que tiene un problema? ¿Por qué?
18. [0.5 puntos] El siguiente diagrama modela el API de Java-RT para creación y
manipulación de objetos Schedulabe. Complételo con la información que crea
oportuna, y justifique la información añadida en el espacio habilitado para ello:
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
guardan estas categorías con las siguientes arquitecturas? Procesadores Multicore,
Sistemas Distribuidos, Cluster de Procesadores, Procesador GPU. Escriba aquí su
respuesta y las relaciones que propone, y justifíquelas:
SISD: Single Instruction, Singlue Data.
Características del Modelo SISD:
La CPU procesa únicamente una instrucción por cada ciclo de reloj, únicamente un
dato es procesado en cada ciclo de reloj. Es el modelo más antiguo de computadora y
el más extendido.
SIMD: Single Instructión, Multiple Data.
Características de Modelo SIMD:
Todas las unidades ejecutan la misma instrucción, cada unidad procesa un dato
distinto, todas las unidades operan simultáneamente.
Procesador GPU.
20. [1 puntos] ¿Es posible implantar regiones críticas como primitiva de control de la
concurrencia en C++11? Escriba y justifique su respuesta; proponga también un
ejemplo en caso positivo:
Si es posible implantarlas simulándolas con mutex.
Struct Contador{
Std:mutex mutex;
Int valor;
Contador():valor(0){}
Void incremento()
{
Mutex.lock();
++valor;
mutex.unlock();
}
};
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-188990
21. [0.5 puntos] ¿Qué sucede cuando una CPU lanza un kernel sobre una GPU nVidia
que actúa como coprocesador? Escriba aquí su repuesta razonada:
GPU es un coprocesador dedicado al procesamiento de gráficos u operaciones de coma
flotante, para aligera la carga de trabajo del procesador central en aplicaciones. De
esta forma, mientras gran parte de lo relacionado con los gráficos se procesa en la
GPU, la unidad central de procesamiento (CPU) puede dedicarse a otro tipo de
cálculos.
22. [1 puntos] Considere el siguiente programa. Indique la salida –si la hay- que
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
produce y el comportamiento que tiene. Justifique su respuesta.
public class E131402 extends Thread{
public static Object[] locks;
public static Integer n= new Integer(0);
private int id;
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
private static AtomicInteger s = new AtomicInteger();
private static ReentrantLock l = new ReentrantLock();
private static int p = 2000;
private static ArrayList<Condition> c = new ArrayList<Condition>();
private int n;
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
exceso ni por defecto. De ahí que cuando nos
salimos de ese intervalo de valores del
coeficiente de bloqueo se produce un
aumento del tiempo.
25. [1 punto] Considere el siguiente programa escrito en C++11. Indique la salida –si la
hay- que produce y el comportamiento que tiene. Justifique su respuesta.
#include <thread>
#include <mutex>
#include <iostream>
struct Comun {
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
para que funcione correctamente se debería usar recursive_mutex, para así tener
cerrojos reentrantes.
26. [0.5 puntos] Como es sabido, un monitor garantiza por construcción la exclusión
mutua de todos los procedimientos que define. Sin embargo, ¿deberían ser también
reentrantes por construcción? Justifique su respuesta.
El sistema de ejecución de Java permite que un Thread re-adquiera el monitor que ya
posee realmente porque los monitores Java son re-entrantes. Los monitores
re-entrantes son importantes porque eliminan la posibilidad de que un solo Thread
ponga en punto muerto un monitor que ya posee.
28. [0.5 puntos] ¿Cuál es el principal inconveniente del uso de monitores en términos
de rendimiento? Justifique su respuesta.
Un monitor se encarga de que siempre se acceda en exclusión mutua a las variables.
Eso está bien cuando la variable es de escritura, pero si es de lectura, entonces se está
perdiendo tiempo al leer en exclusión mutua cuando no haría falta ya que no se está
modificando la variable.
29. [1.0 puntos] Analice la corrección del algoritmo para control de la exclusión
mutua expresado a continuación.
program em
begin (*principal*)
C1:=1; C2:=1;
cobegin
P1; P2;
coend;
end.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-188990
Justifique su respuesta:
La solución a este problema de la exclusión mutua no es correcta, puesto que, primero
los 2 procesos intentan acceder a 2 variables conjuntas al mismo tiempo, cosa que
daría problemas a la hora de elegir quien accede a la sección crítica. Entonces el
problema que tenemos es que dependemos de quien llega primero al bucle que
modifica las variables c para saber quién accede a la sección critica, y aunque un
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
proceso acceda a la sección critica antes que el otro, este otro al repetir el bucle
accederá a la sección critica, cosa que provocaría conflictos de sincronización. Una
solución al problema se podría resolver de la siguiente manera:
Procedure P1 Procedure P2;
Begin Begin
Repeat Repeat
Resto_código Resto_código;
if c2 == 1 if c1 == 1
Sección_Crítica; Sección_Crítica;
c1:=1; c2:=1;
end end
Forever Forever;
import java.util.concurrent.locks.*;
public class E24 extends Thread {
static int x = 0;
final static Lock cerrojo = new ReentrantLock();
static Condition condicion = cerrojo.newCondition();
public void run(){
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
cerrojo.lock();
try{
while(x<5){ condicion.await(); }
x++;
}
catch(Exception ex){} finally { cerrojo.unlock(); }
}
public static void main(String[] args) throws Exception{
E24[] lista = new E24[5];
for(int i=0;i<lista.length;i++){
lista[i] = new E24();
lista[i].start();
}
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
System.out.print("a");
}
32. [1.0 puntos] Considere el siguiente código, que crea cuatro hilos, y observe el
cuerpo del bucle de cada tipo de hilo, formado por una instrucción de asignación
simple. Determine, de forma rigurosa y formal, que tipos de hilos se pueden ejecutar
concurrentemente y cuáles no.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
}
}
Justifique su respuesta:
Para determinar si un conjunto de instrucciones se pueden ejecutar concurrente
utilizaremos las condiciones de Bernstein. Dado un conjunto de escritura E y un
conjunto de lectura L, tenemos que:
L(Si) intersección E(Sj)
E(Si) intersección E(Sj)
E(Si) intersección L(Sj)
L(S1)={x,y} E(S1)={a}
L(S2)={z} E(S2)={b}
L(S3)={a,b} E(S3)={c}
L(S4)={c} E(S4)={w}
33. [1.0 puntos] Considere el siguiente código e indique cual es la salida impresa que
produce.
public class E30 extends Thread{
private static Integer i = new Integer(1);
private static int j=0;
private E30 h;
public E30(){j++;}
public void run(){
if(j<500){
h=new E30();
synchronized(i){i++;}
h.start();
try{h.join();}catch (InterruptedException e){}
}
}
public static void main(String[] args) throws Exception{
E30 h = new E30();
h.start();
h.join();
System.out.println(i.toString());
}
}
Justifique su respuesta:
El programa imprime 500, ya que se crea un hilo que incrementa la variable j. Mientras
que j sea mayor que 500, se crea otro hilo que seguirá incrementando j hasta que esta
sea mayor o igual que 500 que acabara el programa. A su vez todos los hilos creados
incrementan en exclusión mutua la variable i que será la que muestre su valor al final
del programa.
34. [0.5 puntos] ¿Como funciona el multihebrado en el lado del servidor de una
arquitectura RMI ? Justifique su respuesta.
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-188990
35. [0.5 puntos] ¿Cuantas métricas de prioridad emplean los objetos de clase
NoHeapRealTimeThread? ¿Por que?
28 niveles de prioridad fijas porque los objetos planificables no cambian su prioridad
y expulsivas porque el sistema puede expulsar al objeto en ejecución que posee la
CPU.
36. [0.5 puntos] ¿Cuál es el principal inconveniente del modelo de regiones críticas?
Justifique su respuesta.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Las Regiones Críticas no permiten que varios procesos lean simultáneamente una
variable, aun en el caso de que este acceso pueda llevarse a cabo. En segundo lugar,
sirven para sincronizar (Se soluciona con las Regiones Críticas Condicionales).
37. [0.5 puntos] Complete el siguiente diagrama relativo a la arquitectura RMI. Debe
rellenar los recuadros y las líneas horizontales con la información que crea adecuada.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
public synchronized void decrementar(){
while(valor==VMIN){
try{wait();}catch(InterruptedException e){}
}
valor--;
notifyAll();
}
}
39. [1.0 puntos] ¿Cuál es la salida impresa del siguiente código Java?
import java.util.concurrent.locks.*;
import java.util.concurrent.*;
public class E33 implements Runnable{
40. [1.0 puntos] ¿Cuál es la salida impresa y el comportamiento del siguiente código
Java?
public class E34 extends Thread{
private String s;
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
private static Object o = new Object();
public E34(String s){this.s = s;}
public void run(){
synchronized(o){
switch(this.s){
case "ping":
for(int i=0; i<10; i++){
System.out.print(this.s+" ");
o.notify();
try{o.wait();}catch(InterruptedException e){}
}
case "pong":
for(int i=0; i<5; i++){
try{o.wait();}catch(InterruptedException e){}
Consigue tu certificado de inglés Aptis en un tiempo record y a un precio inmejoroable ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-188990
41. [1.0 puntos] Considere el siguiente código e indique cual es la salida impresa que
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
produce.
Justifique su respuesta:
El programa lanza un hilo que al crearse incrementara la variable K con valor inicial =
0.Mientras que K sea menor que 800, se creara un hilo que incrementara K y a su vez
decrementará i, que tiene valor inicial 1. Como se crean 799 hilos en total, el valor de
la variable i al final del programa será -798.
El acceso a la variable i es seguro ya que se utiliza un bloque sincronizado.
42. [1.0 puntos] ¿En qué se diferencian las variables de condición de un monitor
Hoare del wait-set asociado a los objetos Java?
Cada variable de condición tiene asociada una cola FIFO para los procesos que están
bloqueados y ofrece dos operaciones atómicas básicas wait() y signal(), mientras que
wait-set es una cola de procesos bloqueados a nivel de objeto que está asociado con
el lock del objeto, utiliza wait(), notify() y notifyAll().
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-188990
43. [1.0 puntos] ¿Es posible implantar monitores C++11 como primitiva de control de
la concurrencia equivalentes a los monitores Hoare? Escriba y justifique su
respuesta.
Si es posible implantarlos simulandolos mediante mutex.
struct Contador{
std::mutex mutex;
int valor;
Contador():valor(0){}
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
void incremento(){
mutex.lock();
++valor;
mutex.unlock();
}
};
44. [0.5 puntos] ¿Qué sucede cuando una CPU lanza un kernel sobre una CPU nVidia
que actúa como coprocesador? Escriba aquí su respuesta razonada:
GPU es un coprocesador dedicado al procesamiento de gráficos u operaciones de coma
45. [1.0 puntos] Considere el siguiente programa. Indique la salida -si la hay- que
produce y el comportamiento que tiene. Justifique su respuesta.
import java.util.concurrent.*;
class Task implements Runnable{
public static int cont = 0;
private boolean tHilo;
public Task(boolean tHilo){this.tHilo=tHilo;}
public void run(){
if(tHilo)
for(int i=0; i<1000000; i++) cont++;
else for(int i=0; i<1000000; i++) cont--;
}
}
public class E131406{
public static void main(String[] args) throws Exception{
ThreadPoolExecutor ejecutor = new ThreadPoolExecutor(
1, 1, 60000L,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>());
ejecutor.execute(new Task(true));
ejecutor.execute(new Task(false));
ejecutor.shutdown();
Consigue tu certificado de inglés Aptis en un tiempo record y a un precio inmejoroable ¡Clic aquí!
a64b0469ff35958ef4ab887a898bd50bdfbbe91a-188990
while(!ejecutor.isTerminated()){}
System.out.println(Task.cont);
}
}
Indique aquí la salida y el comportamiento, justificando ambos:
El programa devuelve 0 ya que se lanzan dos hilos del pool de Threads que uno suma
y el otro resta. Pero al ser de un pool, el segundo hilo espera a que el primero acabe
su ejecución, por tanto no hay entrelazado.
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
46. [1.0 puntos] Considere el siguiente programa. Indique la salida -si la hay- que
produce y el comportamiento que tiene. Justifique su respuesta.
public class E131408 extends Thread
{
Integer I;
public E131408(Integer I) {this.I=I;}
public void run(){
System.out.println(this.getName());
synchronized(I){
try{I.wait();}catch (InterruptedException e){}
System.out.println(this.getName()+" diCE: Hola...");}
No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
Reservados todos los derechos.
La versión concurrente obtendrá un mayor rendimiento a medida que aumenten los
hilos, ya que habrá entrelazado y se ejecutarán todas las tareas a la vez, mientras que
la otra versión se hará en exclusión mutua por lo que se ejecutaran las tareas de una
en una consiguiendo así que se tarde más en completar todas las tareas y teniendo 3
de los cuatros núcleos ociosos cada vez.