X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d4854883e75206804034547ff47080ec1a751e35..7097ed501ac302a5f0a2b3cd37114c81ec2e9145:/src/sthread/sthread_impl.cpp diff --git a/src/sthread/sthread_impl.cpp b/src/sthread/sthread_impl.cpp index fda1411572..063d26553b 100644 --- a/src/sthread/sthread_impl.cpp +++ b/src/sthread/sthread_impl.cpp @@ -6,6 +6,7 @@ /* SimGrid's pthread interposer. Actual implementation of the symbols (see the comment in sthread.h) */ #include "simgrid/s4u/Barrier.hpp" +#include "simgrid/s4u/ConditionVariable.hpp" #include "smpi/smpi.h" #include "xbt/asserts.h" #include "xbt/ex.h" @@ -238,6 +239,39 @@ int sthread_barrier_destroy(sthread_barrier_t* barrier){ return 0; } +int sthread_cond_init(sthread_cond_t* cond, sthread_condattr_t* attr) +{ + auto cv = sg4::ConditionVariable::create(); + intrusive_ptr_add_ref(cv.get()); + + cond->cond = cv.get(); + return 0; +} +int sthread_cond_signal(sthread_cond_t* cond) +{ + XBT_DEBUG("%s(%p)", __func__, cond); + static_cast(cond->cond)->notify_one(); + return 0; +} +int sthread_cond_broadcast(sthread_cond_t* cond) +{ + XBT_DEBUG("%s(%p)", __func__, cond); + static_cast(cond->cond)->notify_all(); + return 0; +} +int sthread_cond_wait(sthread_cond_t* cond, sthread_mutex_t* mutex) +{ + XBT_DEBUG("%s(%p)", __func__, cond); + static_cast(cond->cond)->wait(static_cast(mutex->mutex)); + return 0; +} +int sthread_cond_destroy(sthread_cond_t* cond) +{ + XBT_DEBUG("%s(%p)", __func__, cond); + intrusive_ptr_release(static_cast(cond->cond)); + return 0; +} + int sthread_sem_init(sthread_sem_t* sem, int /*pshared*/, unsigned int value) { auto s = sg4::Semaphore::create(value);