X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/eb86ef55ebafd813f093d34b293254fc1587a7b2..7cfc39a067963b183621e9e9d08d604de258de34:/examples/async/Master.java diff --git a/examples/async/Master.java b/examples/async/Master.java index e7a89f25b1..19e840cf49 100644 --- a/examples/async/Master.java +++ b/examples/async/Master.java @@ -8,12 +8,20 @@ */ package async; +import java.util.ArrayList; + +import org.simgrid.msg.Comm; +import org.simgrid.msg.Host; +import org.simgrid.msg.Process; import org.simgrid.msg.Msg; import org.simgrid.msg.MsgException; import org.simgrid.msg.Task; import org.simgrid.msg.Process;; public class Master extends Process { + public Master(Host host, String name, String[]args) { + super(host,name,args); + } public void main(String[] args) throws MsgException { if (args.length < 4) { Msg.info("Master needs 4 arguments"); @@ -27,21 +35,38 @@ public class Master extends Process { int slavesCount = Integer.valueOf(args[3]).intValue(); Msg.info("Hello! Got "+ slavesCount + " slaves and "+tasksCount+" tasks to process"); - + ArrayList comms = new ArrayList(); + for (int i = 0; i < tasksCount; i++) { Task task = new Task("Task_" + i, taskComputeSize, taskCommunicateSize); - //Msg.info("Sending \"" + task.getName()+ "\" to \"slave_" + i % slavesCount + "\""); - task.send("slave_"+(i%slavesCount)); + Msg.info("Sending \"" + task.getName()+ "\" to \"slave_" + i % slavesCount + "\""); + //task.send("slave_"+(i%slavesCount)); + Comm comm = task.isend("slave_"+(i%slavesCount)); + comms.add(comm); } - simulatedSleep(1); - + + while (comms.size() > 0) { + for (int i = 0; i < comms.size(); i++) { + try { + if (comms.get(i).test()) { + comms.remove(i); + i--; + } + } + catch (Exception e) { + e.printStackTrace(); + } + } + waitFor(1); + } + Msg.info("All tasks have been dispatched. Let's tell (asynchronously) everybody the computation is over, and sleep 20s so that nobody gets a message from a terminated process."); for (int i = 0; i < slavesCount; i++) { FinalizeTask task = new FinalizeTask(); task.dsend("slave_"+(i%slavesCount)); } - simulatedSleep(20); + waitFor(20); Msg.info("Goodbye now!"); }