1#ifndef BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP
2#define BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP
3// (C) Copyright 2007-8 Anthony Williams
4//
5// Distributed under the Boost Software License, Version 1.0. (See
6// accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8
9#include <pthread.h>
10#include <boost/assert.hpp>
11
12#include <boost/config/abi_prefix.hpp>
13
14namespace boost
15{
16 namespace pthread
17 {
18 class pthread_mutex_scoped_lock
19 {
20 pthread_mutex_t* m;
21 bool locked;
22 public:
23 explicit pthread_mutex_scoped_lock(pthread_mutex_t* m_):
24 m(m_),locked(true)
25 {
26 BOOST_VERIFY(!pthread_mutex_lock(m));
27 }
28 void unlock()
29 {
30 BOOST_VERIFY(!pthread_mutex_unlock(m));
31 locked=false;
32 }
33
34 ~pthread_mutex_scoped_lock()
35 {
36 if(locked)
37 {
38 unlock();
39 }
40 }
41
42 };
43
44 class pthread_mutex_scoped_unlock
45 {
46 pthread_mutex_t* m;
47 public:
48 explicit pthread_mutex_scoped_unlock(pthread_mutex_t* m_):
49 m(m_)
50 {
51 BOOST_VERIFY(!pthread_mutex_unlock(m));
52 }
53 ~pthread_mutex_scoped_unlock()
54 {
55 BOOST_VERIFY(!pthread_mutex_lock(m));
56 }
57
58 };
59 }
60}
61
62#include <boost/config/abi_suffix.hpp>
63
64#endif
65