OLD | NEW |
---|---|
(Empty) | |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #ifndef PPAPI_UTILITY_THREADING_LOCK_H_ | |
6 #define PPAPI_UTILITY_THREADING_LOCK_H_ | |
7 | |
8 #ifdef WIN32 | |
9 #include <windows.h> | |
10 #else | |
11 #include <pthread.h> | |
12 #endif | |
13 | |
14 namespace pp { | |
15 | |
16 /// A simple wrapper around a platform-specific lock. See also AutoLock. | |
17 class Lock { | |
18 public: | |
19 /// Creates a lock in the "not held" state. | |
20 Lock(); | |
21 | |
22 /// Destroys the lock. | |
23 ~Lock(); | |
24 | |
25 /// Acquires the lock, blocking if it's already held by a different thread. | |
26 /// The lock must not already be held on the current thread (i.e. recursive | |
27 /// locks are not supported). | |
28 /// | |
29 /// Most callers should consider using an AucoLock instead to automatically | |
viettrungluu
2012/07/10 22:47:58
s/Auco/Auto
| |
30 /// acquire and release the lock. | |
31 void Acquire(); | |
32 | |
33 /// Releases the lock. This must be paired with a call to Acquire(). | |
34 void Release(); | |
35 | |
36 private: | |
37 #if defined(WIN32) | |
38 typedef CRITICAL_SECTION OSLockType; | |
39 #else | |
40 typedef pthread_mutex_t OSLockType; | |
41 #endif | |
42 | |
43 OSLockType os_lock_; | |
44 | |
45 // Copy and assign not supported. | |
46 Lock(const Lock&); | |
47 Lock& operator=(const Lock&); | |
48 }; | |
49 | |
50 /// A helper class that scopes holding a lock. | |
51 /// | |
52 /// @code | |
53 /// class MyClass { | |
54 /// public: | |
55 /// void DoSomething() { | |
56 /// pp::AutoLock lock(lock_); | |
57 /// ...do something with the lock held... | |
58 /// } | |
59 /// | |
60 /// private: | |
61 /// pp::Lock lock_; | |
62 /// }; | |
63 /// @endcode | |
64 class AutoLock { | |
65 public: | |
66 explicit AutoLock(Lock& lock) : lock_(lock) { | |
67 lock_.Acquire(); | |
viettrungluu
2012/07/10 22:47:58
Indentation.
| |
68 } | |
69 | |
70 ~AutoLock() { | |
71 lock_.Release(); | |
72 } | |
73 | |
74 private: | |
75 Lock& lock_; | |
76 | |
77 // Copy and assign not supported. | |
78 AutoLock(const AutoLock&); | |
79 AutoLock& operator=(const AutoLock&); | |
80 }; | |
81 | |
82 } // namespace pp | |
83 | |
84 #endif // PPAPI_UTILITY_THREADING_LOCK_H_ | |
OLD | NEW |