-/* Copyright (c) 2010-2018. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2010-2020. 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. */
/* This example shows how to block on the completion of a set of communications.
*
* As for the other asynchronous examples, the sender initiate all the messages it wants to send and
- * pack the resulting simgrid::s4u::CommPtr objects in a vector. All messages thus occurs concurrently.
+ * pack the resulting simgrid::s4u::CommPtr objects in a vector. All messages thus occur concurrently.
*
* The sender then blocks until all ongoing communication terminate, using simgrid::s4u::Comm::wait_all()
*
#include <iostream>
#include <string>
-XBT_LOG_NEW_DEFAULT_CATEGORY(msg_async_waitall, "Messages specific for this s4u example");
+XBT_LOG_NEW_DEFAULT_CATEGORY(s4u_async_waitall, "Messages specific for this s4u example");
class Sender {
- long messages_count; /* - number of tasks */
+ long messages_count; /* - number of messages */
long receivers_count; /* - number of receivers */
- double msg_size; /* - communication cost in bytes */
+ double msg_size; /* - message size in bytes */
public:
explicit Sender(std::vector<std::string> args)
std::vector<simgrid::s4u::CommPtr> pending_comms;
/* Make a vector of the mailboxes to use */
- std::vector<simgrid::s4u::MailboxPtr> mboxes;
+ std::vector<simgrid::s4u::Mailbox*> mboxes;
for (int i = 0; i < receivers_count; i++)
mboxes.push_back(simgrid::s4u::Mailbox::by_name(std::string("receiver-") + std::to_string(i)));
// sphinx-doc: init-end
/* Start dispatching all messages to receivers, in a round robin fashion */
for (int i = 0; i < messages_count; i++) {
std::string msg_content = std::string("Message ") + std::to_string(i);
- // Copy the data we send: 'msg_content' is not a stable storage location.
+ // Copy the data we send: the 'msg_content' variable is not a stable storage location.
// It will be destroyed when this actor leaves the loop, ie before the receiver gets it
std::string* payload = new std::string(msg_content);
/* Receiver actor expects 1 argument: its ID */
class Receiver {
- simgrid::s4u::MailboxPtr mbox;
+ simgrid::s4u::Mailbox* mbox;
public:
explicit Receiver(std::vector<std::string> args)
{
XBT_INFO("Wait for my first message");
for (bool cont = true; cont;) {
- std::string* received = static_cast<std::string*>(mbox->get());
+ const std::string* received = static_cast<std::string*>(mbox->get());
XBT_INFO("I got a '%s'.", received->c_str());
cont = (*received != "finalize"); // If it's a finalize message, we're done
// Receiving the message was all we were supposed to do