X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/5c193dfc57256298e9b04e4a2fe887135ca49b86..7224ac739b068ae7fc2f1a811eb7ee6410e1f7fe:/examples/s4u/app-masterworker/s4u_app-masterworker.cpp diff --git a/examples/s4u/app-masterworker/s4u_app-masterworker.cpp b/examples/s4u/app-masterworker/s4u_app-masterworker.cpp index 04102b739c..c0ce006b50 100644 --- a/examples/s4u/app-masterworker/s4u_app-masterworker.cpp +++ b/examples/s4u/app-masterworker/s4u_app-masterworker.cpp @@ -41,17 +41,15 @@ public: number_of_tasks, mailbox->getName()); /* - Send the computation amount to the @ref worker */ - mailbox->put(static_cast(&comp_size), comm_size); + mailbox->put(new double(comp_size), comm_size); } XBT_INFO("All tasks have been dispatched. Let's tell everybody the computation is over."); for (int i = 0; i < workers_count; i++) { /* - Eventually tell all the workers to stop by sending a "finalize" task */ mailbox = simgrid::s4u::Mailbox::byName(std::string("worker-") + std::to_string(i % workers_count)); - double finalize = -1; - mailbox->put(static_cast(&finalize), 0); + mailbox->put(new double(-1.0), 0); } - simgrid::s4u::this_actor::sleep_for(.1); // Grace time to ensure everyone finishes. } }; @@ -71,14 +69,16 @@ public: void operator()() { while (1) { /* The worker waits in an infinite loop for tasks sent by the \ref master */ - double* comp_size = static_cast(mailbox->get()); - xbt_assert(comp_size != nullptr, "MSG_task_get failed"); - if (*comp_size < 0) { /* - Exit if 'finalize' is received */ + double* task = static_cast(mailbox->get()); + xbt_assert(task != nullptr, "mailbox->get() failed"); + double comp_size = *task; + delete task; + if (comp_size < 0) { /* - Exit when -1.0 is received */ XBT_INFO("I'm done. See you!"); break; } /* - Otherwise, process the task */ - simgrid::s4u::this_actor::execute(*comp_size); + simgrid::s4u::this_actor::execute(comp_size); } } };