Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[s4u] add condition variables
[simgrid.git] / src / s4u / s4u_conditionVariable.cpp
diff --git a/src/s4u/s4u_conditionVariable.cpp b/src/s4u/s4u_conditionVariable.cpp
new file mode 100644 (file)
index 0000000..60e3365
--- /dev/null
@@ -0,0 +1,36 @@
+#include "simgrid/s4u/conditionVariable.hpp"
+#include "simgrid/simix.h"
+
+using namespace simgrid;
+
+s4u::ConditionVariable::ConditionVariable()  : cond_(simcall_cond_init()){
+    
+}
+
+s4u::ConditionVariable::~ConditionVariable() {
+  SIMIX_cond_unref(cond_);
+}
+
+/**
+ * Wait functions
+ */
+void s4u::ConditionVariable::wait(s4u::Mutex *mutex) {
+  simcall_cond_wait(cond_, mutex->mutex_);
+}
+  
+void s4u::ConditionVariable::wait_for(s4u::Mutex *mutex, double timeout) {
+  simcall_cond_wait_timeout(cond_, mutex->mutex_, timeout);
+}
+  
+/**
+ * Notify functions
+ */
+void s4u::ConditionVariable::notify() { 
+   simcall_cond_signal(cond_);
+}
+void s4u::ConditionVariable::notify_all() {
+  simcall_cond_broadcast(cond_);
+}
+