Академический Документы
Профессиональный Документы
Культура Документы
Resoluo do Exerccio 1
public class Cont extends Thread {
protected int ct;
public Cont() { ct=0; }
public synchronized void inc() { ct++; }
public void run() {
for (int i=0; i<100; i++) {
inc();
System.out.print(" i= " + ct);
}
}
public static void main(String[] arg) {
System.out.print("\nSequencial");
new Cont().run();
new Cont().run();
System.out.print("\nParalelo");
new Cont().start();
new Cont().run();
}
}
Resoluo do Exerccio 2
public class MyClock extends Thread {
public MyClock() {
start();
}
public void run() {
for(int i=0; i<10; i++) { // durante 10 segundos
try {
sleep(1000);
} catch (InterruptedException e) {}
System.out.println(i + " segundos");
}
System.out.println("terminou");
}
public static void main(String[] arg) {
new MyClock();
}
}
Arquitecturas Paralelas I
13
Programao Concorrente/Paralela
Resoluo do Exerccio 3
Arquitecturas Paralelas I
14
Programao Concorrente/Paralela
Arquitecturas Paralelas I
15
Programao Concorrente/Paralela
Resoluo do Exerccio 4
// Counter.java
public interface Counter extends Remote {
void count() throws RemoteException;
}
// CounterServer.java
import java.rmi.*;
import java.rmi.server.*;
public class CounterServer extends RemoteObject implements Counter {
public void count() throws RemoteException {
for(int i=0; i<100; i++) System.out.print(i + " ");
}
}
// CounterServerApp.java
import javax.naming.*;
import javax.rmi.PortableRemoteObject;
public class CounterServerApp {
public static void main(String args[]) {
try {
CounterServer cs1 = new CounterServer();
PortableRemoteObject.exportObject(cs1);
CounterServer cs2 = new CounterServer();
PortableRemoteObject.exportObject(cs2);
Context ctx = new InitialContext();
ctx.rebind("CounterServer1",cs1);
ctx.rebind("CounterServer2",cs2);
BufferedReader rdr = new BufferedReader(new
InputStreamReader(System.in));
while (true) {
System.out.println("Type EXIT to shutdown the server");
if ("EXIT".equals(rdr.readLine())) { break; }
}
ctx.unbind("CounterServer1");
ctx.unbind("CounterServer2");
PortableRemoteObject.unexportObject(cs1);
PortableRemoteObject.unexportObject(cs2);
} catch(Exception e) { e.printStackTrace(); }
}
}
Arquitecturas Paralelas I
16
Programao Concorrente/Paralela
ex.printStackTrace();
// CounterClient.java
import javax.naming.*;
import java.util.*;
public class CounterClient {
public static Counter findCounter(String cnt, Context ctx) {
Counter cs=null;
try {
cs = (Counter) PortableRemoteObject.narrow(
ctx.lookup(cnt), Counter.class);
}
catch(Exception ex) { ex.printStackTrace();
}
return(cs);
}
public static void main(String args[]) {
try {
Context ctx = new InitialContext();
Counter cs1 = findCounter("CounterServer1",ctx);
Counter cs2 = findCounter("CounterServer2",ctx);
// Execuo sequencial
cs1.count();
cs2.count();
// Execuo em paralelo
(new AssCounter(cs1)).start();
cs2.count();
}
catch(Exception ex) {
ex.printStackTrace();
}
}
Arquitecturas Paralelas I
17
Programao Concorrente/Paralela
Resoluo do Exerccio 5.
// AssCounter.java
public class AssCounter extends Thread {
Counter myCount;
Callback myClient;
public AssCounter(Counter c, Callback cl) {
myCount =c;
myClient = cl;
}
public void run() {
try {
myCount.count();
} catch(Exception ex) {
myClient.callOP();
}
ex.printStackTrace();
// CounterClient.java
public class CounterClient implements Callback {
public void
try {
Context
Counter
Counter
execute() {
ctx = new InitialContext();
cs1 = findCounter("CounterServer1",ctx);
cs2 = findCounter("CounterServer2",ctx);
// Execuo em paralelo
new AssCounter(cs1,this).start();
new AssCounter(cs2,this).start();
}
catch(Exception ex) {
ex.printStackTrace();
}
public void callOP() {
System.out.println("Done");
}
public static void main(String args[]) {
new CounterClient().execute();
}
}
Arquitecturas Paralelas I
18
Programao Concorrente/Paralela
Resoluo do Exerccio 6
// Counter.cs
using System;
using System.Runtime.Remoting.Messaging;
public abstract class Counter: MarshalByRefObject {
public abstract void count();
}
// CounterServer.cs
using
using
using
using
using
using
System;
System.Runtime.Remoting;
System.Runtime.Remoting.Channels.Http;
System.Runtime.Remoting.Channels;
System.Runtime.Remoting.Messaging;
System.Threading;
Arquitecturas Paralelas I
19
Programao Concorrente/Paralela
System;
System.Runtime.Remoting;
System.Runtime.Remoting.Channels.Http;
System.Runtime.Remoting.Channels.Tcp;
System.Runtime.Remoting.Channels;
System.Runtime.Remoting.Proxies;
class CounterClient {
delegate void CounterDelegate();
static void Main(string[] args) {
HttpChannel channel = new HttpChannel();
ChannelServices.RegisterChannel(channel);
Counter obj = (Counter) Activator.GetObject(
typeof(Counter),
"http://localhost:1234/CounterServer.soap");
Console.WriteLine("Client.Main(): Reference to rem.obj.
acquired");
// execuo sequencial
obj.count();
obj.count();
// execuo em paralelo
CounterDelegate cDel1 = new CounterDelegate(obj.count);
IAsyncResult svAsy1 = cDel1.BeginInvoke(null,null);
Console.WriteLine("Client.Main(): Invocation1 done");
CounterDelegate cDel2 = new CounterDelegate(obj.count);
IAsyncResult svAsy2 = cDel2.BeginInvoke(null,null);
Console.WriteLine("Client.Main(): Invocation2 done");
try
{
cDel1.EndInvoke(svAsy1);
Console.WriteLine("EndInvoke1 returned successfully ");
} catch (Exception e)
{
Console.WriteLine("EXCEPTION during EndInvoke1");
}
try
{
cDel2.EndInvoke(svAsy2);
Console.WriteLine("EndInvoke2 returned successfully");
} catch (Exception e)
{
Console.WriteLine("EXCEPTION during EndInvoke2");
}
// wait for keypress
Console.ReadLine();
}
}
Arquitecturas Paralelas I
20