Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Enforce "Rule-of-Three/Five".
[simgrid.git] / src / smpi / include / smpi_win.hpp
index 20010ad..beee0b4 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2018. The SimGrid Team.
+/* Copyright (c) 2010-2019. The SimGrid Team.
  * All rights reserved.                                                     */
 
 /* This program is free software; you can redistribute it and/or modify it
@@ -7,10 +7,10 @@
 #ifndef SMPI_WIN_HPP_INCLUDED
 #define SMPI_WIN_HPP_INCLUDED
 
+#include "simgrid/s4u/Barrier.hpp"
 #include "smpi_f2c.hpp"
 #include "smpi_keyvals.hpp"
 #include "xbt/synchro.h"
-#include <simgrid/msg.h>
 
 #include <vector>
 #include <list>
@@ -27,15 +27,15 @@ class Win : public F2C, public Keyval {
   MPI_Info info_;
   MPI_Comm comm_;
   std::vector<MPI_Request> *requests_;
-  xbt_mutex_t mut_;
-  msg_bar_t bar_;
+  s4u::MutexPtr mut_;
+  s4u::Barrier* bar_;
   MPI_Win* connected_wins_;
   char* name_;
   int opened_;
   MPI_Group group_;
   int count_; //for ordering the accs
-  xbt_mutex_t lock_mut_;
-  xbt_mutex_t atomic_mut_;
+  s4u::MutexPtr lock_mut_;
+  s4u::MutexPtr atomic_mut_;
   std::list<int> lockers_;
   int rank_; // to identify owner for barriers in MPI_COMM_WORLD
   int mode_; // exclusive or shared lock
@@ -48,6 +48,8 @@ public:
 
   Win(void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm, int allocated = 0, int dynamic = 0);
   Win(MPI_Info info, MPI_Comm comm) : Win(MPI_BOTTOM, 0, 1, info, comm, 0, 1) {};
+  Win(const Win&) = delete;
+  Win& operator=(const Win&) = delete;
   ~Win();
   int attach (void *base, MPI_Aint size);
   int detach (void *base);
@@ -90,6 +92,7 @@ public:
   int flush_local_all();
   int finish_comms();
   int finish_comms(int rank);
+  int shared_query(int rank, MPI_Aint* size, int* disp_unit, void* baseptr);
 };