1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #ifndef BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP
- #define BOOST_PTHREAD_MUTEX_SCOPED_LOCK_HPP
- #include <pthread.h>
- #include <boost/assert.hpp>
- #include <boost/thread/pthread/pthread_helpers.hpp>
- #include <boost/config/abi_prefix.hpp>
- namespace boost
- {
- namespace pthread
- {
- class pthread_mutex_scoped_lock
- {
- pthread_mutex_t* m;
- bool locked;
- public:
- explicit pthread_mutex_scoped_lock(pthread_mutex_t* m_) BOOST_NOEXCEPT:
- m(m_),locked(true)
- {
- BOOST_VERIFY(!posix::pthread_mutex_lock(m));
- }
- void unlock() BOOST_NOEXCEPT
- {
- BOOST_VERIFY(!posix::pthread_mutex_unlock(m));
- locked=false;
- }
- void unlock_if_locked() BOOST_NOEXCEPT
- {
- if(locked)
- {
- unlock();
- }
- }
- ~pthread_mutex_scoped_lock() BOOST_NOEXCEPT
- {
- if(locked)
- {
- unlock();
- }
- }
- };
- class pthread_mutex_scoped_unlock
- {
- pthread_mutex_t* m;
- public:
- explicit pthread_mutex_scoped_unlock(pthread_mutex_t* m_) BOOST_NOEXCEPT:
- m(m_)
- {
- BOOST_VERIFY(!posix::pthread_mutex_unlock(m));
- }
- ~pthread_mutex_scoped_unlock() BOOST_NOEXCEPT
- {
- BOOST_VERIFY(!posix::pthread_mutex_lock(m));
- }
- };
- }
- }
- #include <boost/config/abi_suffix.hpp>
- #endif
|