File: mutex.h

package info (click to toggle)
cppdb 0.3.1%2Bdfsg-8
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster
  • size: 668 kB
  • sloc: cpp: 7,373; sh: 133; ansic: 72; makefile: 7
file content (66 lines) | stat: -rw-r--r-- 1,553 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
///////////////////////////////////////////////////////////////////////////////
//                                                                             
//  Copyright (C) 2010-2011  Artyom Beilis (Tonkikh) <artyomtnk@yahoo.com>     
//                                                                             
//  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)
//
//  or (at your opinion) under:
//
//                               The MIT License
//                 (See accompanying file MIT.txt or a copy at
//              http://www.opensource.org/licenses/mit-license.php)
//
///////////////////////////////////////////////////////////////////////////////
#ifndef CPPDB_MUTEX_H
#define CPPDB_MUTEX_H

#include <cppdb/defs.h>

namespace cppdb {

	///
	/// \brief mutex class, used internally
	///
	class CPPDB_API mutex {
		mutex(mutex const &);
		void operator=(mutex const  &);
	public:
		class guard;
		/// Create mutex
		mutex();
		/// Destroy mutex
		~mutex();
		/// Lock mutex
		void lock();
		/// Unlock mutex
		void unlock();
	private:
		void *mutex_impl_;
	};

	///
	/// \brief scoped guard for mutex
	///
	class mutex::guard {
		guard(guard const &);
		void operator=(guard const &);
	public:
		/// Create scoped lock
		guard(mutex &m) : m_(&m)
		{
			m_->lock();
		}
		/// unlock the mutex
		~guard()
		{
			m_->unlock();
		}
	private:
		mutex *m_;
	};
}
#endif