X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/2e20b9d63d8a9ca26f8b508b5cab294acc3b608a..e48eade5ab404acd1948883302768c55be145b6a:/examples/cpp/synchro-mutex/s4u-synchro-mutex.cpp diff --git a/examples/cpp/synchro-mutex/s4u-synchro-mutex.cpp b/examples/cpp/synchro-mutex/s4u-synchro-mutex.cpp index 9c7d4f6754..241322650e 100644 --- a/examples/cpp/synchro-mutex/s4u-synchro-mutex.cpp +++ b/examples/cpp/synchro-mutex/s4u-synchro-mutex.cpp @@ -1,13 +1,13 @@ -/* Copyright (c) 2006-2022. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2023. 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. */ #include "simgrid/s4u.hpp" /* All of S4U */ #include "xbt/config.hpp" -namespace sg4 = simgrid::s4u; +#include /* std::mutex and std::scoped_lock */ -#include /* std::mutex and std::lock_guard */ +namespace sg4 = simgrid::s4u; static simgrid::config::Flag cfg_actor_count("actors", "How many pairs of actors should be started?", 6); @@ -29,14 +29,14 @@ static void worker(sg4::MutexPtr mutex, int& result) mutex->unlock(); } -static void workerLockGuard(sg4::MutexPtr mutex, int& result) +static void workerScopedLock(sg4::MutexPtr mutex, int& result) { - // Simply use the std::lock_guard like this + // Simply use the std::scoped_lock like this // It's like a lock() that would do the unlock() automatically when getting out of scope - std::lock_guard lock(*mutex); + const std::scoped_lock lock(*mutex); // then you are in a safe zone - XBT_INFO("Hello s4u, I'm ready to compute after a lock_guard"); + XBT_INFO("Hello s4u, I'm ready to compute after a scoped_lock"); // update the results result += 1; XBT_INFO("I'm done, good bye"); @@ -44,26 +44,24 @@ static void workerLockGuard(sg4::MutexPtr mutex, int& result) // Nothing specific here: the unlock will be automatic } -static void master() +int main(int argc, char** argv) { - int result = 0; + sg4::Engine e(&argc, argv); + e.load_platform(argc > 1 ? argv[1] : "../../platforms/two_hosts.xml"); + + /* Create the requested amount of actors pairs. Each pair has a specific mutex and cell in `result`. */ + std::vector result(cfg_actor_count.get()); for (int i = 0; i < cfg_actor_count; i++) { sg4::MutexPtr mutex = sg4::Mutex::create(); - sg4::Actor::create("worker", sg4::Host::by_name("Jupiter"), workerLockGuard, mutex, std::ref(result)); - sg4::Actor::create("worker", sg4::Host::by_name("Tremblay"), worker, mutex, std::ref(result)); + sg4::Actor::create("worker", sg4::Host::by_name("Jupiter"), workerScopedLock, mutex, std::ref(result[i])); + sg4::Actor::create("worker", sg4::Host::by_name("Tremblay"), worker, mutex, std::ref(result[i])); } - sg4::this_actor::sleep_for(10); - XBT_INFO("Results is -> %d", result); -} - -int main(int argc, char **argv) -{ - sg4::Engine e(&argc, argv); - e.load_platform("../../platforms/two_hosts.xml"); - sg4::Actor::create("main", e.host_by_name("Tremblay"), master); e.run(); + for (int i = 0; i < cfg_actor_count; i++) + XBT_INFO("Result[%d] -> %d", i, result[i]); + return 0; }