c++-actor-framework

Does C++ Actor Framework guarantee message order?


Can C++ Actor Framework be used in such a way that it guarantees message ordering between two actors? I couldn't find anything about this in the manual.


Solution

  • If you have only two actors communicating directly, CAF guarantees that messages arrive in the order they have been sent. Only multi-hop scenarios can cause non-determinism and message reordering.

    auto a = spawn(A);
    self->send(a, "foo");
    self->send(a, 42); // arrives always after "foo"
    

    At the receiving end, it is possible to change the message processing order by changing the actor behavior with become:

    [=](int) {
      self->become(
        keep_behavior,
        [=](const std::string&) {
          self->unbecome();
        }
      );
    }
    

    In the above example, this will process the int before the string message, even though they have arrived in opposite order at the actor's mailbox.