X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/32db5a3c200f56f6c965eeddc14e6f88341acbe8..7b13238bee59da3e8d3621560943d14d18ceeea4:/src/s4u/s4u_Mutex.cpp diff --git a/src/s4u/s4u_Mutex.cpp b/src/s4u/s4u_Mutex.cpp index 5e0b6a7943..ce2b60cf75 100644 --- a/src/s4u/s4u_Mutex.cpp +++ b/src/s4u/s4u_Mutex.cpp @@ -1,8 +1,10 @@ -/* Copyright (c) 2006-2019. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2006-2020. 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. */ +#include "simgrid/forward.h" +#include "simgrid/mutex.h" #include "simgrid/s4u/Mutex.hpp" #include "src/kernel/activity/MutexImpl.hpp" @@ -42,18 +44,18 @@ bool Mutex::try_lock() */ MutexPtr Mutex::create() { - smx_mutex_t mutex = simcall_mutex_init(); + kernel::activity::MutexImpl* mutex = kernel::actor::simcall([] { return new kernel::activity::MutexImpl(); }); return MutexPtr(&mutex->mutex(), false); } /* refcounting of the intrusive_ptr is delegated to the implementation object */ -void intrusive_ptr_add_ref(Mutex* mutex) +void intrusive_ptr_add_ref(const Mutex* mutex) { xbt_assert(mutex); if (mutex->pimpl_) mutex->pimpl_->ref(); } -void intrusive_ptr_release(Mutex* mutex) +void intrusive_ptr_release(const Mutex* mutex) { xbt_assert(mutex); if (mutex->pimpl_) @@ -62,3 +64,32 @@ void intrusive_ptr_release(Mutex* mutex) } // namespace s4u } // namespace simgrid + +/* **************************** Public C interface *************************** */ +sg_mutex_t sg_mutex_init() +{ + simgrid::kernel::activity::MutexImpl* mutex = + simgrid::kernel::actor::simcall([] { return new simgrid::kernel::activity::MutexImpl(); }); + + return new simgrid::s4u::Mutex(mutex); +} + +void sg_mutex_lock(sg_mutex_t mutex) +{ + mutex->lock(); +} + +void sg_mutex_unlock(sg_mutex_t mutex) +{ + mutex->unlock(); +} + +int sg_mutex_try_lock(sg_mutex_t mutex) +{ + return mutex->try_lock(); +} + +void sg_mutex_destroy(const_sg_mutex_t mutex) +{ + delete mutex; +}