File indexing completed on 2025-02-22 10:29:21
0001 #ifndef BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP
0002 #define BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP
0003
0004
0005
0006
0007
0008
0009 #include <pthread.h>
0010 #include <boost/assert.hpp>
0011 #include <boost/thread/pthread/pthread_helpers.hpp>
0012
0013 #include <boost/config/abi_prefix.hpp>
0014
0015 namespace boost
0016 {
0017 namespace pthread
0018 {
0019 class pthread_mutex_scoped_lock
0020 {
0021 pthread_mutex_t* m;
0022 bool locked;
0023 public:
0024 explicit pthread_mutex_scoped_lock(pthread_mutex_t* m_) BOOST_NOEXCEPT:
0025 m(m_),locked(true)
0026 {
0027 BOOST_VERIFY(!posix::pthread_mutex_lock(m));
0028 }
0029 void unlock() BOOST_NOEXCEPT
0030 {
0031 BOOST_VERIFY(!posix::pthread_mutex_unlock(m));
0032 locked=false;
0033 }
0034 void unlock_if_locked() BOOST_NOEXCEPT
0035 {
0036 if(locked)
0037 {
0038 unlock();
0039 }
0040 }
0041 ~pthread_mutex_scoped_lock() BOOST_NOEXCEPT
0042 {
0043 if(locked)
0044 {
0045 unlock();
0046 }
0047 }
0048
0049 };
0050
0051 class pthread_mutex_scoped_unlock
0052 {
0053 pthread_mutex_t* m;
0054 public:
0055 explicit pthread_mutex_scoped_unlock(pthread_mutex_t* m_) BOOST_NOEXCEPT:
0056 m(m_)
0057 {
0058 BOOST_VERIFY(!posix::pthread_mutex_unlock(m));
0059 }
0060 ~pthread_mutex_scoped_unlock() BOOST_NOEXCEPT
0061 {
0062 BOOST_VERIFY(!posix::pthread_mutex_lock(m));
0063 }
0064
0065 };
0066 }
0067 }
0068
0069 #include <boost/config/abi_suffix.hpp>
0070
0071 #endif