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