From cb384017166c74fdfd75b07c8a80b1af46c9447d Mon Sep 17 00:00:00 2001 From: Takishipp Date: Thu, 23 Nov 2017 10:19:10 +0100 Subject: [PATCH] S4U version of actor-yield example --- examples/s4u/README.doc | 6 ++++++ examples/s4u/actor-yield/s4u-actor-yield.cpp | 11 +++++------ src/s4u/s4u_actor.cpp | 10 +++++----- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/examples/s4u/README.doc b/examples/s4u/README.doc index 97be9a1597..9de079760f 100644 --- a/examples/s4u/README.doc +++ b/examples/s4u/README.doc @@ -83,6 +83,12 @@ documentation, but it should remain readable directly. @ref examples/s4u/actor-migration/s4u-actor-migration.cpp \n Actors can move or be moved from a host to another with the @ref migrate method. + - Yielding to other actor. + @ref examples/s4u/actor-yield/s4u-actor-yield.c\n + The @ref yield function interrupts the execution of the + current actor, leaving a chance to run to the other actor + that are ready to run at the exact same timestamp + @section s4u_ex_synchro Inter-Actor Synchronization - Mutex: @ref examples/s4u/mutex/s4u-mutex.cpp \n diff --git a/examples/s4u/actor-yield/s4u-actor-yield.cpp b/examples/s4u/actor-yield/s4u-actor-yield.cpp index 6e79dc6c6b..f55423335d 100644 --- a/examples/s4u/actor-yield/s4u-actor-yield.cpp +++ b/examples/s4u/actor-yield/s4u-actor-yield.cpp @@ -8,11 +8,11 @@ #include "src/simix/smx_private.h" #include -/* This example does not much: It just spans over-polite processes that yield a large amount +/* This example does not much: It just spans over-polite actor that yield a large amount * of time before ending. * -* This serves as an example for the s4u-actor-yield() function, with which a process can request -* to be rescheduled after the other processes that are ready at the current timestamp. +* This serves as an example for the s4u-actor-yield() function, with which an actor can request +* to be rescheduled after the other actor that are ready at the current timestamp. * * It can also be used to benchmark our context-switching mechanism. */ @@ -28,9 +28,8 @@ public: } void operator()() { - simgrid::s4u::ActorPtr actor; for (int i = 0; i < number_of_yields; i++) - actor->yield(); + simgrid::s4u::this_actor::yield(); XBT_INFO("I yielded %ld times. Goodbye now!", number_of_yields); } }; @@ -40,7 +39,7 @@ int main(int argc, char* argv[]) simgrid::s4u::Engine e(&argc, argv); xbt_assert(argc > 2, "Usage: %s platform_file deployment_file\n" - "\tExample: %s msg_platform.xml msg_deployment.xml\n", + "\tExample: %s platform.xml deployment.xml\n", argv[0], argv[0]); e.loadPlatform(argv[1]); /* - Load the platform description */ diff --git a/src/s4u/s4u_actor.cpp b/src/s4u/s4u_actor.cpp index db27edc18c..0789eecc3d 100644 --- a/src/s4u/s4u_actor.cpp +++ b/src/s4u/s4u_actor.cpp @@ -120,11 +120,6 @@ int Actor::isSuspended() return simgrid::simix::kernelImmediate([this] { return pimpl_->suspended; }); } -void Actor::yield() -{ - simgrid::simix::kernelImmediate([] { /* do nothing*/ }); -} - void Actor::setKillTime(double time) { simcall_process_set_kill_time(pimpl_,time); } @@ -219,6 +214,11 @@ void sleep_for(double duration) simcall_process_sleep(duration); } +void yield() +{ + simgrid::simix::kernelImmediate([] { /* do nothing*/ }); +} + XBT_PUBLIC(void) sleep_until(double timeout) { double now = SIMIX_get_clock(); -- 2.20.1