--- /dev/null
+/* Public interface to the Link datatype */
+
+/* Copyright (c) 2018. 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. */
+
+#ifndef INCLUDE_SIMGRID_BARRIER_H_
+#define INCLUDE_SIMGRID_BARRIER_H_
+
+#include <simgrid/forward.h>
+
+/* C interface */
+SG_BEGIN_DECL()
+
+XBT_PUBLIC sg_bar_t sg_barrier_init(unsigned int count);
+XBT_PUBLIC void sg_barrier_destroy(sg_bar_t bar);
+XBT_PUBLIC int sg_barrier_wait(sg_bar_t bar);
+
+SG_END_DECL()
+
+#endif /* INCLUDE_SIMGRID_BARRIER_H_ */
using ActorPtr = boost::intrusive_ptr<Actor>;
XBT_PUBLIC void intrusive_ptr_release(Actor* actor);
XBT_PUBLIC void intrusive_ptr_add_ref(Actor* actor);
+class Barrier;
class Comm;
using CommPtr = boost::intrusive_ptr<Comm>;
XBT_PUBLIC void intrusive_ptr_release(Comm* c);
} // namespace simgrid
typedef simgrid::s4u::Actor s4u_Actor;
+typedef simgrid::s4u::Barrier s4u_Barrier;
typedef simgrid::s4u::Host s4u_Host;
typedef simgrid::s4u::Link s4u_Link;
typedef simgrid::s4u::File s4u_File;
#else
typedef struct s4u_Actor s4u_Actor;
+typedef struct s4u_Barrier s4u_Barrier;
typedef struct s4u_Host s4u_Host;
typedef struct s4u_Link s4u_Link;
typedef struct s4u_File s4u_File;
#endif
+typedef s4u_Barrier* sg_bar_t;
typedef s4u_NetZone* sg_netzone_t;
typedef s4u_Host* sg_host_t;
typedef s4u_Link* sg_link_t;
#define SIMGRID_MSG_H
#include <simgrid/actor.h>
+#include <simgrid/barrier.h>
#include <simgrid/engine.h>
#include <simgrid/forward.h>
#include <simgrid/host.h>
XBT_PUBLIC void MSG_sem_destroy(msg_sem_t sem);
XBT_PUBLIC int MSG_sem_would_block(msg_sem_t sem);
-/** @brief Opaque type representing a barrier identifier
- * @ingroup msg_synchro
- * @hideinitializer
- */
-
-#define MSG_BARRIER_SERIAL_PROCESS -1
-typedef struct s_msg_bar_t* msg_bar_t;
+typedef sg_bar_t msg_bar_t;
XBT_PUBLIC msg_bar_t MSG_barrier_init(unsigned int count);
XBT_PUBLIC void MSG_barrier_destroy(msg_bar_t bar);
XBT_PUBLIC int MSG_barrier_wait(msg_bar_t bar);
{
sg_vm_destroy(vm);
}
+/********* barriers ************/
+sg_bar_t MSG_barrier_init(unsigned int count)
+{
+ return sg_barrier_init(count);
+}
+
+void MSG_barrier_destroy(sg_bar_t bar)
+{
+ sg_barrier_destroy(bar);
+}
+
+int MSG_barrier_wait(sg_bar_t bar)
+{
+ return sg_barrier_wait(bar);
+}
return simgrid::simix::simcall([sem] { return SIMIX_sem_would_block(sem); });
}
-/*-**** barrier related functions ****-*/
-struct s_msg_bar_t {
- xbt_mutex_t mutex;
- xbt_cond_t cond;
- unsigned int arrived_processes;
- unsigned int expected_processes;
-};
-
-/** @brief Initializes a barrier, with count elements */
-msg_bar_t MSG_barrier_init(unsigned int count) {
- msg_bar_t bar = new s_msg_bar_t;
- bar->expected_processes = count;
- bar->arrived_processes = 0;
- bar->mutex = xbt_mutex_init();
- bar->cond = xbt_cond_init();
- return bar;
-}
-
-/** @brief Initializes a barrier, with count elements */
-void MSG_barrier_destroy(msg_bar_t bar) {
- xbt_mutex_destroy(bar->mutex);
- xbt_cond_destroy(bar->cond);
- delete bar;
-}
-
-/** @brief Performs a barrier already initialized */
-int MSG_barrier_wait(msg_bar_t bar) {
- xbt_mutex_acquire(bar->mutex);
- bar->arrived_processes++;
- XBT_DEBUG("waiting %p %u/%u", bar, bar->arrived_processes, bar->expected_processes);
- if (bar->arrived_processes == bar->expected_processes) {
- xbt_cond_broadcast(bar->cond);
- xbt_mutex_release(bar->mutex);
- bar->arrived_processes = 0;
- return MSG_BARRIER_SERIAL_PROCESS;
- }
-
- xbt_cond_wait(bar->cond, bar->mutex);
- xbt_mutex_release(bar->mutex);
- return 0;
-}
/**@}*/
#include <xbt/ex.hpp>
#include <xbt/log.hpp>
+#include "simgrid/barrier.h"
#include "simgrid/s4u/Barrier.hpp"
#include "simgrid/simix.h"
}
} // namespace s4u
} // namespace simgrid
+
+/* **************************** Public C interface *************************** */
+
+sg_bar_t sg_barrier_init(unsigned int count)
+{
+ return new simgrid::s4u::Barrier(count);
+}
+
+/** @brief Initializes a barrier, with count elements */
+void sg_barrier_destroy(sg_bar_t bar)
+{
+ delete bar;
+}
+
+/** @brief Performs a barrier already initialized */
+int sg_barrier_wait(sg_bar_t bar)
+{
+ return bar->wait();
+}
include/simgrid_config.h
include/simgrid/actor.h
+ include/simgrid/barrier.h
include/simgrid/engine.h
include/simgrid/chrono.hpp
include/simgrid/plugins/dvfs.h