Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
add send with timeout and irecv to this_actor API
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Tue, 4 Apr 2017 07:30:18 +0000 (09:30 +0200)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Tue, 4 Apr 2017 07:30:18 +0000 (09:30 +0200)
include/simgrid/s4u/Actor.hpp
src/s4u/s4u_actor.cpp

index 28b2491..c158e9d 100644 (file)
@@ -302,12 +302,14 @@ namespace this_actor {
    * See \ref Comm for the full communication API (including non blocking communications).
    */
   XBT_PUBLIC(void*) recv(MailboxPtr chan);
    * See \ref Comm for the full communication API (including non blocking communications).
    */
   XBT_PUBLIC(void*) recv(MailboxPtr chan);
+  XBT_PUBLIC(Comm&) irecv(MailboxPtr chan, void** data);
 
   /** Block the actor until it delivers a message of the given simulated size to the given mailbox
    *
    * See \ref Comm for the full communication API (including non blocking communications).
   */
   XBT_PUBLIC(void) send(MailboxPtr chan, void* payload, double simulatedSize);
 
   /** Block the actor until it delivers a message of the given simulated size to the given mailbox
    *
    * See \ref Comm for the full communication API (including non blocking communications).
   */
   XBT_PUBLIC(void) send(MailboxPtr chan, void* payload, double simulatedSize);
+  XBT_PUBLIC(void) send(MailboxPtr chan, void* payload, double simulatedSize, double timeout);
 
   XBT_PUBLIC(Comm&) isend(MailboxPtr chan, void* payload, double simulatedSize);
 
 
   XBT_PUBLIC(Comm&) isend(MailboxPtr chan, void* payload, double simulatedSize);
 
index 8959135..570c181 100644 (file)
@@ -190,11 +190,25 @@ void send(MailboxPtr chan, void* payload, double simulatedSize)
   c.wait();
 }
 
   c.wait();
 }
 
+void send(MailboxPtr chan, void* payload, double simulatedSize, double timeout)
+{
+  Comm& c = Comm::send_init(chan);
+  c.setRemains(simulatedSize);
+  c.setSrcData(payload);
+  // c.start() is optional.
+  c.wait(timeout);
+}
+
 Comm& isend(MailboxPtr chan, void* payload, double simulatedSize)
 {
   return Comm::send_async(chan, payload, simulatedSize);
 }
 
 Comm& isend(MailboxPtr chan, void* payload, double simulatedSize)
 {
   return Comm::send_async(chan, payload, simulatedSize);
 }
 
+Comm& isend(MailboxPtr chan, void** data)
+{
+  return Comm::recv_async(chan, data);
+}
+
 int pid()
 {
   return SIMIX_process_self()->pid;
 int pid()
 {
   return SIMIX_process_self()->pid;