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>
27 #include <stxxl/bits/noncopyable.h>
28 #include <stxxl/bits/common/utils.h>
33 __STXXL_BEGIN_NAMESPACE
35 #ifdef STXXL_BOOST_THREADS
37 typedef boost::mutex mutex;
41 class mutex :
private noncopyable
43 pthread_mutex_t _mutex;
48 check_pthread_call(pthread_mutex_init(&_mutex, NULL));
53 int res = pthread_mutex_trylock(&_mutex);
55 if (res == 0 || res == EBUSY) {
56 check_pthread_call(pthread_mutex_unlock(&_mutex));
58 stxxl_function_error(resource_error);
60 check_pthread_call(pthread_mutex_destroy(&_mutex));
64 check_pthread_call(pthread_mutex_lock(&_mutex));
68 check_pthread_call(pthread_mutex_unlock(&_mutex));
74 #ifdef STXXL_BOOST_THREADS
81 class scoped_mutex_lock
87 scoped_mutex_lock(mutex & mtx_) : mtx(mtx_), is_locked(
false)
116 __STXXL_END_NAMESPACE
118 #endif // !STXXL_MUTEX_HEADER