You've already forked mariadb-columnstore-engine
							
							
				mirror of
				https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
				synced 2025-11-03 17:13:17 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Distributed under the Boost Software License, Version 1.0. (See
 | 
						|
// accompanying file LICENSE_1_0.txt or copy at
 | 
						|
// http://www.boost.org/LICENSE_1_0.txt)
 | 
						|
// (C) Copyright 2012 Vicente J. Botet Escriba
 | 
						|
 | 
						|
#ifndef BOOST_THREAD_REVERSE_LOCK_HPP
 | 
						|
#define BOOST_THREAD_REVERSE_LOCK_HPP
 | 
						|
#include <boost/thread/detail/config.hpp>
 | 
						|
#include <boost/thread/detail/move.hpp>
 | 
						|
#include <boost/thread/lockable_traits.hpp>
 | 
						|
#include <boost/thread/lock_options.hpp>
 | 
						|
#include <boost/thread/detail/delete.hpp>
 | 
						|
 | 
						|
namespace boost
 | 
						|
{
 | 
						|
 | 
						|
    template<typename Lock>
 | 
						|
    class reverse_lock
 | 
						|
    {
 | 
						|
    public:
 | 
						|
        typedef typename Lock::mutex_type mutex_type;
 | 
						|
        BOOST_THREAD_NO_COPYABLE(reverse_lock)
 | 
						|
 | 
						|
        explicit reverse_lock(Lock& m_)
 | 
						|
        : m(m_), mtx(0)
 | 
						|
        {
 | 
						|
            if (m.owns_lock())
 | 
						|
            {
 | 
						|
              m.unlock();
 | 
						|
            }
 | 
						|
            mtx=m.release();
 | 
						|
        }
 | 
						|
        ~reverse_lock()
 | 
						|
        {
 | 
						|
          if (mtx) {
 | 
						|
            mtx->lock();
 | 
						|
            m = BOOST_THREAD_MAKE_RV_REF(Lock(*mtx, adopt_lock));
 | 
						|
          }
 | 
						|
        }
 | 
						|
 | 
						|
    private:
 | 
						|
      Lock& m;
 | 
						|
      mutex_type* mtx;
 | 
						|
    };
 | 
						|
 | 
						|
 | 
						|
#ifdef BOOST_THREAD_NO_AUTO_DETECT_MUTEX_TYPES
 | 
						|
    template<typename T>
 | 
						|
    struct is_mutex_type<reverse_lock<T> >
 | 
						|
    {
 | 
						|
        BOOST_STATIC_CONSTANT(bool, value = true);
 | 
						|
    };
 | 
						|
 | 
						|
#endif
 | 
						|
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
#endif // header
 |