From: Fred Suter Date: Mon, 30 Oct 2023 14:04:20 +0000 (-0400) Subject: add MessageQueue to all ActivitySet examples X-Git-Tag: v3.35~89^2~22^2~21 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/845f1a4618a1b53c91e4ff66f67f583cd8700b8c add MessageQueue to all ActivitySet examples --- diff --git a/examples/cpp/activityset-waitall/s4u-activityset-waitall.cpp b/examples/cpp/activityset-waitall/s4u-activityset-waitall.cpp index efbc3a08ab..2c9cf1ad8b 100644 --- a/examples/cpp/activityset-waitall/s4u-activityset-waitall.cpp +++ b/examples/cpp/activityset-waitall/s4u-activityset-waitall.cpp @@ -9,28 +9,30 @@ #include namespace sg4 = simgrid::s4u; -XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_activity_waittany, "Messages specific for this s4u example"); +XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_activity_waitall, "Messages specific for this s4u example"); static void bob() { sg4::Mailbox* mbox = sg4::Mailbox::by_name("mbox"); + sg4::MessageQueue* mqueue = sg4::MessageQueue::by_name("mqueue"); const sg4::Disk* disk = sg4::Host::current()->get_disks().front(); std::string* payload; + std::string* message; XBT_INFO("Create my asynchronous activities"); auto exec = sg4::this_actor::exec_async(5e9); auto comm = mbox->get_async(&payload); auto io = disk->read_async(3e8); + auto mess = mqueue->get_async(&message); - sg4::ActivitySet pending_activities({boost::dynamic_pointer_cast(exec), - boost::dynamic_pointer_cast(comm), - boost::dynamic_pointer_cast(io)}); + sg4::ActivitySet pending_activities({exec, comm, io, mess}); XBT_INFO("Wait for asynchronous activities to complete, all in one shot."); pending_activities.wait_all(); XBT_INFO("All activities are completed."); delete payload; + delete message; } static void alice() @@ -40,6 +42,12 @@ static void alice() sg4::Mailbox::by_name("mbox")->put(payload, 6e8); } +static void carl() +{ + auto* payload = new std::string("Control Message"); + sg4::MessageQueue::by_name("mqueue")->put(payload); +} + int main(int argc, char* argv[]) { sg4::Engine e(&argc, argv); @@ -48,6 +56,7 @@ int main(int argc, char* argv[]) sg4::Actor::create("bob", e.host_by_name("bob"), bob); sg4::Actor::create("alice", e.host_by_name("alice"), alice); + sg4::Actor::create("carl", e.host_by_name("carl"), carl); e.run(); diff --git a/examples/cpp/activityset-waitallfor/s4u-activityset-waitallfor.cpp b/examples/cpp/activityset-waitallfor/s4u-activityset-waitallfor.cpp index 971d77441c..a322cc4f1b 100644 --- a/examples/cpp/activityset-waitallfor/s4u-activityset-waitallfor.cpp +++ b/examples/cpp/activityset-waitallfor/s4u-activityset-waitallfor.cpp @@ -9,20 +9,23 @@ #include namespace sg4 = simgrid::s4u; -XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_activity_waittany, "Messages specific for this s4u example"); +XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_activity_waitallfor, "Messages specific for this s4u example"); static void bob() { sg4::Mailbox* mbox = sg4::Mailbox::by_name("mbox"); + sg4::MessageQueue* mqueue = sg4::MessageQueue::by_name("mqueue"); const sg4::Disk* disk = sg4::Host::current()->get_disks().front(); std::string* payload; + std::string* message; XBT_INFO("Create my asynchronous activities"); auto exec = sg4::this_actor::exec_async(5e9); auto comm = mbox->get_async(&payload); auto io = disk->read_async(3e8); + auto mess = mqueue->get_async(&message); - sg4::ActivitySet pending_activities({exec, comm, io}); + sg4::ActivitySet pending_activities({exec, comm, io, mess}); XBT_INFO("Wait for asynchronous activities to complete"); while (not pending_activities.empty()) { @@ -34,6 +37,8 @@ static void bob() while (auto completed_one = pending_activities.test_any()) { if (boost::dynamic_pointer_cast(completed_one)) XBT_INFO("Completed a Comm"); + if (boost::dynamic_pointer_cast(completed_one)) + XBT_INFO("Completed a Mess"); if (boost::dynamic_pointer_cast(completed_one)) XBT_INFO("Completed an Exec"); if (boost::dynamic_pointer_cast(completed_one)) @@ -42,6 +47,7 @@ static void bob() } XBT_INFO("Last activity is complete"); delete payload; + delete message; } static void alice() @@ -51,6 +57,14 @@ static void alice() sg4::Mailbox::by_name("mbox")->put(payload, 6e8); } +static void carl() +{ + sg4::this_actor::sleep_for(1.99); + auto* payload = new std::string("Control Message"); + XBT_INFO("Send '%s'", payload->c_str()); + sg4::MessageQueue::by_name("mqueue")->put(payload); +} + int main(int argc, char* argv[]) { sg4::Engine e(&argc, argv); @@ -59,6 +73,7 @@ int main(int argc, char* argv[]) sg4::Actor::create("bob", e.host_by_name("bob"), bob); sg4::Actor::create("alice", e.host_by_name("alice"), alice); + sg4::Actor::create("carl", e.host_by_name("carl"), carl); e.run(); diff --git a/examples/cpp/activityset-waitallfor/s4u-activityset-waitallfor.tesh b/examples/cpp/activityset-waitallfor/s4u-activityset-waitallfor.tesh index 014c4f028e..ce8db4ac50 100644 --- a/examples/cpp/activityset-waitallfor/s4u-activityset-waitallfor.tesh +++ b/examples/cpp/activityset-waitallfor/s4u-activityset-waitallfor.tesh @@ -5,7 +5,9 @@ $ ${bindir:=.}/s4u-activityset-waitallfor ${platfdir}/hosts_with_disks.xml "--lo > [0.000000] [ bob] Create my asynchronous activities > [0.000000] [ bob] Wait for asynchronous activities to complete > [1.000000] [ bob] Not all activities are terminated yet. +> [1.990000] [ carl] Send 'Control Message' > [2.000000] [ bob] Not all activities are terminated yet. +> [2.000000] [ bob] Completed a Mess > [3.000000] [ bob] Not all activities are terminated yet. > [3.000000] [ bob] Completed an I/O > [4.000000] [ bob] Not all activities are terminated yet. diff --git a/examples/cpp/activityset-waitany/s4u-activityset-waitany.cpp b/examples/cpp/activityset-waitany/s4u-activityset-waitany.cpp index 6f081b3ca6..6c8baef61e 100644 --- a/examples/cpp/activityset-waitany/s4u-activityset-waitany.cpp +++ b/examples/cpp/activityset-waitany/s4u-activityset-waitany.cpp @@ -9,22 +9,23 @@ #include namespace sg4 = simgrid::s4u; -XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_activity_waittany, "Messages specific for this s4u example"); +XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_activity_waitany, "Messages specific for this s4u example"); static void bob() { sg4::Mailbox* mbox = sg4::Mailbox::by_name("mbox"); + sg4::MessageQueue* mqueue = sg4::MessageQueue::by_name("mqueue"); const sg4::Disk* disk = sg4::Host::current()->get_disks().front(); std::string* payload; + std::string* message; XBT_INFO("Create my asynchronous activities"); auto exec = sg4::this_actor::exec_async(5e9); auto comm = mbox->get_async(&payload); auto io = disk->read_async(3e8); + auto mess = mqueue->get_async(&message); - sg4::ActivitySet pending_activities({boost::dynamic_pointer_cast(exec), - boost::dynamic_pointer_cast(comm), - boost::dynamic_pointer_cast(io)}); + sg4::ActivitySet pending_activities({exec, comm, io, mess}); XBT_INFO("Wait for asynchronous activities to complete"); while (not pending_activities.empty()) { @@ -32,6 +33,8 @@ static void bob() if (completed_one != nullptr) { if (boost::dynamic_pointer_cast(completed_one)) XBT_INFO("Completed a Comm"); + if (boost::dynamic_pointer_cast(completed_one)) + XBT_INFO("Completed a Mess"); if (boost::dynamic_pointer_cast(completed_one)) XBT_INFO("Completed an Exec"); if (boost::dynamic_pointer_cast(completed_one)) @@ -40,6 +43,7 @@ static void bob() } XBT_INFO("Last activity is complete"); delete payload; + delete message; } static void alice() @@ -49,6 +53,14 @@ static void alice() sg4::Mailbox::by_name("mbox")->put(payload, 6e8); } +static void carl() +{ + sg4::this_actor::sleep_for(2); + auto* payload = new std::string("Control Message"); + XBT_INFO("Send '%s'", payload->c_str()); + sg4::MessageQueue::by_name("mqueue")->put(payload); +} + int main(int argc, char* argv[]) { sg4::Engine e(&argc, argv); @@ -57,6 +69,7 @@ int main(int argc, char* argv[]) sg4::Actor::create("bob", e.host_by_name("bob"), bob); sg4::Actor::create("alice", e.host_by_name("alice"), alice); + sg4::Actor::create("carl", e.host_by_name("carl"), carl); e.run(); diff --git a/examples/cpp/activityset-waitany/s4u-activityset-waitany.tesh b/examples/cpp/activityset-waitany/s4u-activityset-waitany.tesh index b9ecf1eafa..e665de5b6c 100644 --- a/examples/cpp/activityset-waitany/s4u-activityset-waitany.tesh +++ b/examples/cpp/activityset-waitany/s4u-activityset-waitany.tesh @@ -4,6 +4,8 @@ $ ${bindir:=.}/s4u-activityset-waitany ${platfdir}/hosts_with_disks.xml "--log=r > [0.000000] [alice] Send 'Message' > [0.000000] [ bob] Create my asynchronous activities > [0.000000] [ bob] Wait for asynchronous activities to complete +> [2.000000] [ carl] Send 'Control Message' +> [2.000000] [ bob] Completed a Mess > [3.000000] [ bob] Completed an I/O > [5.000000] [ bob] Completed an Exec > [5.197828] [ bob] Completed a Comm