Panda3D

mutexSimpleImpl.I
Go to the documentation of this file.
1 /**
2 * PANDA 3D SOFTWARE
3 * Copyright (c) Carnegie Mellon University. All rights reserved.
4 *
5 * All use of this software is subject to the terms of the revised BSD
6 * license. You should have received a copy of this license along
7 * with this source code in a file named "LICENSE."
8 *
9 * @file mutexSimpleImpl.I
10 * @author drose
11 * @date 2007-06-19
12 */
13
14 /**
15 *
16 */
17 INLINE void MutexSimpleImpl::
18 lock() {
19 if (!try_lock()) {
20 do_lock();
21 }
22 }
23
24 /**
25 *
26 */
27 INLINE bool MutexSimpleImpl::
28 try_lock() {
29 if ((_flags & F_lock_count) != 0) {
30 return false;
31 }
32 _flags |= F_lock_count;
33 return true;
34 }
35
36 /**
37 * Releases the mutex. An immediate context switch might occur if there were
38 * waiters on the mutex.
39 */
40 INLINE void MutexSimpleImpl::
41 unlock() {
42 nassertv((_flags & F_lock_count) != 0);
43 _flags &= ~F_lock_count;
44
45 if (_flags & F_has_waiters) {
46 do_unlock();
47 }
48 }
49
50 /**
51 * Releases the mutex, without allowing a context switch to occur.
52 */
53 INLINE void MutexSimpleImpl::
54 unlock_quietly() {
55 nassertv((_flags & F_lock_count) != 0);
56 _flags &= ~F_lock_count;
57
58 if (_flags & F_has_waiters) {
59 do_unlock_quietly();
60 }
61 }