+
+/* **************************** Public C interface *************************** */
+sg_cond_t sg_cond_init()
+{
+ simgrid::kernel::activity::ConditionVariableImpl* cond =
+ simgrid::kernel::actor::simcall([] { return new simgrid::kernel::activity::ConditionVariableImpl(); });
+
+ return new simgrid::s4u::ConditionVariable(cond);
+}
+
+void sg_cond_wait(sg_cond_t cond, sg_mutex_t mutex)
+{
+ cond->wait(mutex);
+}
+
+int sg_cond_wait_for(sg_cond_t cond, sg_mutex_t mutex, double delay)
+{
+ std::unique_lock<simgrid::s4u::Mutex> lock(*mutex);
+ return cond->wait_for(lock, delay) == std::cv_status::timeout ? 1 : 0;
+}
+
+void sg_cond_notify_one(sg_cond_t cond)
+{
+ cond->notify_one();
+}
+
+void sg_cond_notify_all(sg_cond_t cond)
+{
+ cond->notify_all();
+}
+
+void sg_cond_destroy(const_sg_cond_t cond)
+{
+ delete cond;
+}