1 /*
2  * Copyright 2010-2019 Branimir Karadzic. All rights reserved.
3  * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
4  */
5 
6 #ifndef BX_MUTEX_H_HEADER_GUARD
7 #define BX_MUTEX_H_HEADER_GUARD
8 
9 #include "bx.h"
10 
11 namespace bx
12 {
13 	///
14 	class Mutex
15 	{
16 		BX_CLASS(Mutex
17 			, NO_COPY
18 			, NO_ASSIGNMENT
19 			);
20 
21 	public:
22 		///
23 		Mutex();
24 
25 		///
26 		~Mutex();
27 
28 		///
29 		void lock();
30 
31 		///
32 		void unlock();
33 
34 	private:
35 		BX_ALIGN_DECL(16, uint8_t) m_internal[64];
36 	};
37 
38 	///
39 	class MutexScope
40 	{
41 		BX_CLASS(MutexScope
42 			, NO_DEFAULT_CTOR
43 			, NO_COPY
44 			, NO_ASSIGNMENT
45 			);
46 
47 	public:
48 		///
49 		MutexScope(Mutex& _mutex);
50 
51 		///
52 		~MutexScope();
53 
54 	private:
55 		Mutex& m_mutex;
56 	};
57 
58 } // namespace bx
59 
60 #include "inline/mutex.inl"
61 
62 #endif // BX_MUTEX_H_HEADER_GUARD
63