14 #ifndef STXXL_MUTEX_HEADER
15 #define STXXL_MUTEX_HEADER
17 #include <stxxl/bits/namespace.h>
19 #ifdef STXXL_BOOST_THREADS
21 #include <boost/thread/mutex.hpp>
28 #include <stxxl/bits/noncopyable.h>
29 #include <stxxl/bits/common/error_handling.h>
34 __STXXL_BEGIN_NAMESPACE
36 #ifdef STXXL_BOOST_THREADS
38 typedef boost::mutex mutex;
42 class mutex :
private noncopyable
44 pthread_mutex_t _mutex;
49 check_pthread_call(pthread_mutex_init(&_mutex, NULL));
54 int res = pthread_mutex_trylock(&_mutex);
56 if (res == 0 || res == EBUSY) {
57 check_pthread_call(pthread_mutex_unlock(&_mutex));
59 stxxl_function_error(resource_error);
61 check_pthread_call(pthread_mutex_destroy(&_mutex));
65 check_pthread_call(pthread_mutex_lock(&_mutex));
69 check_pthread_call(pthread_mutex_unlock(&_mutex));
75 #ifdef STXXL_BOOST_THREADS
82 class scoped_mutex_lock
88 scoped_mutex_lock(mutex & mtx_) : mtx(mtx_), is_locked(
false)
117 __STXXL_END_NAMESPACE
119 #endif // !STXXL_MUTEX_HEADER
Aquire a lock that's valid until the end of scope.
Definition: mutex.h:82