X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/59251ff676c562b79573e3561166e4351e4ad11e..e2bc3b5da67548cb7210dbdf6297650a429c8836:/src/s4u/s4u_Actor.cpp diff --git a/src/s4u/s4u_Actor.cpp b/src/s4u/s4u_Actor.cpp index 77b3806315..ce00aafa29 100644 --- a/src/s4u/s4u_Actor.cpp +++ b/src/s4u/s4u_Actor.cpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2006-2021. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2022. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -51,7 +51,7 @@ ActorPtr Actor::init(const std::string& name, s4u::Host* host) { const kernel::actor::ActorImpl* self = kernel::actor::ActorImpl::self(); kernel::actor::ActorImpl* actor = - kernel::actor::simcall([self, &name, host] { return self->init(name, host).get(); }); + kernel::actor::simcall_answered([self, &name, host] { return self->init(name, host).get(); }); return actor->get_iface(); } @@ -66,7 +66,7 @@ ActorPtr Actor::set_stacksize(unsigned stacksize) ActorPtr Actor::start(const std::function& code) { - simgrid::kernel::actor::simcall([this, &code] { pimpl_->start(code); }); + simgrid::kernel::actor::simcall_answered([this, &code] { pimpl_->start(code); }); return this; } @@ -74,7 +74,7 @@ ActorPtr Actor::create(const std::string& name, s4u::Host* host, const std::func { const kernel::actor::ActorImpl* self = kernel::actor::ActorImpl::self(); kernel::actor::ActorImpl* actor = - kernel::actor::simcall([self, &name, host, &code] { return self->init(name, host)->start(code); }); + kernel::actor::simcall_answered([self, &name, host, &code] { return self->init(name, host)->start(code); }); return actor->get_iface(); } @@ -122,9 +122,9 @@ void Actor::join(double timeout) const }); } -void Actor::set_auto_restart(bool autorestart) +Actor* Actor::set_auto_restart(bool autorestart) { - kernel::actor::simcall([this, autorestart]() { + kernel::actor::simcall_answered([this, autorestart]() { xbt_assert(autorestart && not pimpl_->has_to_auto_restart()); // FIXME: handle all cases pimpl_->set_auto_restart(autorestart); @@ -132,18 +132,19 @@ void Actor::set_auto_restart(bool autorestart) XBT_DEBUG("Adding %s to the actors_at_boot_ list of Host %s", arg->name.c_str(), arg->host->get_cname()); pimpl_->get_host()->get_impl()->add_actor_at_boot(arg); }); + return this; } void Actor::on_exit(const std::function& fun) const { - kernel::actor::simcall([this, &fun] { pimpl_->on_exit->emplace_back(fun); }); + kernel::actor::simcall_answered([this, &fun] { pimpl_->on_exit->emplace_back(fun); }); } void Actor::set_host(Host* new_host) { const s4u::Host* previous_location = get_host(); - kernel::actor::simcall([this, new_host]() { + kernel::actor::simcall_answered([this, new_host]() { for (auto const& activity : pimpl_->activities_) { // FIXME: implement the migration of other kinds of activities if (auto exec = boost::dynamic_pointer_cast(activity)) @@ -160,9 +161,10 @@ s4u::Host* Actor::get_host() const return this->pimpl_->get_host(); } -void Actor::daemonize() +Actor* Actor::daemonize() { - kernel::actor::simcall([this]() { pimpl_->daemonize(); }); + kernel::actor::simcall_answered([this]() { pimpl_->daemonize(); }); + return this; } bool Actor::is_daemon() const @@ -170,6 +172,12 @@ bool Actor::is_daemon() const return this->pimpl_->is_daemon(); } +bool Actor::is_maestro() +{ + const auto* self = kernel::actor::ActorImpl::self(); + return self == nullptr || kernel::EngineImpl::get_instance()->is_maestro(self); +} + const simgrid::xbt::string& Actor::get_name() const { return this->pimpl_->get_name(); @@ -206,7 +214,7 @@ void Actor::suspend() void Actor::resume() { - kernel::actor::simcall([this] { pimpl_->resume(); }); + kernel::actor::simcall_answered([this] { pimpl_->resume(); }); s4u::Actor::on_resume(*this); } @@ -217,7 +225,7 @@ bool Actor::is_suspended() const void Actor::set_kill_time(double kill_time) { - kernel::actor::simcall([this, kill_time] { pimpl_->set_kill_time(kill_time); }); + kernel::actor::simcall_answered([this, kill_time] { pimpl_->set_kill_time(kill_time); }); } /** @brief Get the kill time of an actor(or 0 if unset). */ @@ -229,7 +237,7 @@ double Actor::get_kill_time() const void Actor::kill() { const kernel::actor::ActorImpl* self = kernel::actor::ActorImpl::self(); - kernel::actor::simcall([this, self] { self->kill(pimpl_); }); + kernel::actor::simcall_answered([this, self] { self->kill(pimpl_); }); } // ***** Static functions ***** @@ -246,7 +254,7 @@ ActorPtr Actor::by_pid(aid_t pid) void Actor::kill_all() { const kernel::actor::ActorImpl* self = kernel::actor::ActorImpl::self(); - kernel::actor::simcall([self] { self->kill_all(); }); + kernel::actor::simcall_answered([self] { self->kill_all(); }); } const std::unordered_map* Actor::get_properties() const @@ -262,12 +270,12 @@ const char* Actor::get_property(const std::string& key) const void Actor::set_property(const std::string& key, const std::string& value) { - kernel::actor::simcall([this, &key, &value] { pimpl_->set_property(key, value); }); + kernel::actor::simcall_answered([this, &key, &value] { pimpl_->set_property(key, value); }); } Actor* Actor::restart() { - return kernel::actor::simcall([this]() { return pimpl_->restart(); }); + return kernel::actor::simcall_answered([this]() { return pimpl_->restart(); }); } // ***** this_actor ***** @@ -285,7 +293,7 @@ namespace this_actor { */ bool is_maestro() { - return SIMIX_is_maestro(); + return Actor::is_maestro(); } void sleep_for(double duration) @@ -324,7 +332,7 @@ void sleep_for(double duration) void yield() { - kernel::actor::simcall([] { /* do nothing*/ }); + kernel::actor::simcall_answered([] { /* do nothing*/ }); } XBT_PUBLIC void sleep_until(double wakeup_time) @@ -350,6 +358,10 @@ void parallel_execute(const std::vector& hosts, const std::vectorwait(); } +void thread_execute(s4u::Host* host, double flops_amount, int thread_count) +{ + Exec::init()->set_flops_amount(flops_amount)->set_host(host)->set_thread_count(thread_count)->wait(); +} ExecPtr exec_init(double flops_amount) { return Exec::init()->set_flops_amount(flops_amount)->set_host(get_host()); @@ -423,7 +435,7 @@ void suspend() void exit() { kernel::actor::ActorImpl* self = simgrid::kernel::actor::ActorImpl::self(); - simgrid::kernel::actor::simcall([self] { self->exit(); }); + simgrid::kernel::actor::simcall_answered([self] { self->exit(); }); THROW_IMPOSSIBLE; } @@ -531,21 +543,6 @@ sg_actor_t sg_actor_by_pid(aid_t pid) return simgrid::s4u::Actor::by_pid(pid).get(); } -aid_t sg_actor_get_PID(const_sg_actor_t actor) // XBT_ATTRIB_DEPRECATED_v331 -{ - return sg_actor_get_pid(actor); -} - -aid_t sg_actor_get_PPID(const_sg_actor_t actor) // XBT_ATTRIB_DEPRECATED_v331 -{ - return sg_actor_get_ppid(actor); -} - -sg_actor_t sg_actor_by_PID(aid_t pid) // XBT_ATTRIB_DEPRECATED_v331 -{ - return sg_actor_by_pid(pid); -} - /** @brief Return the name of an actor. */ const char* sg_actor_get_name(const_sg_actor_t actor) { @@ -750,7 +747,7 @@ const char* sg_actor_self_get_name() void* sg_actor_self_get_data() { - return simgrid::s4u::Actor::self()->get_data(); + return simgrid::s4u::Actor::self()->get_data(); } void sg_actor_self_set_data(void* userdata) @@ -758,26 +755,11 @@ void sg_actor_self_set_data(void* userdata) simgrid::s4u::Actor::self()->set_data(userdata); } -void* sg_actor_self_data() // XBT_ATTRIB_DEPRECATED_v330 -{ - return sg_actor_self_get_data(); -} - -void sg_actor_self_data_set(void* userdata) // XBT_ATTRIB_DEPRECATED_v330 -{ - sg_actor_self_set_data(userdata); -} - sg_actor_t sg_actor_self() { return simgrid::s4u::Actor::self(); } -void sg_actor_self_execute(double flops) // XBT_ATTRIB_DEPRECATED_v330 -{ - simgrid::s4u::this_actor::execute(flops); -} - void sg_actor_execute(double flops) { simgrid::s4u::this_actor::execute(flops); @@ -814,7 +796,7 @@ void sg_actor_unref(const_sg_actor_t actor) /** @brief Return the user data of a #sg_actor_t */ void* sg_actor_get_data(const_sg_actor_t actor) { - return actor->get_data(); + return actor->get_data(); } /** @brief Set the user data of a #sg_actor_t */ @@ -823,16 +805,6 @@ void sg_actor_set_data(sg_actor_t actor, void* userdata) actor->set_data(userdata); } -void* sg_actor_data(const_sg_actor_t actor) // XBT_ATTRIB_DEPRECATED_v330 -{ - return sg_actor_get_data(actor); -} - -void sg_actor_data_set(sg_actor_t actor, void* userdata) // XBT_ATTRIB_DEPRECATED_v330 -{ - sg_actor_set_data(actor, userdata); -} - /** @brief Add a function to the list of "on_exit" functions for the current actor. * The on_exit functions are the functions executed when your actor is killed. * You should use them to free the data used by your actor.