Index: ppapi/utility/threading/lock.h |
diff --git a/ppapi/utility/threading/lock.h b/ppapi/utility/threading/lock.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..f4292e1ab660afaacbc1247ee473ef94d3c880a2 |
--- /dev/null |
+++ b/ppapi/utility/threading/lock.h |
@@ -0,0 +1,84 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef PPAPI_UTILITY_THREADING_LOCK_H_ |
+#define PPAPI_UTILITY_THREADING_LOCK_H_ |
+ |
+#ifdef WIN32 |
+#include <windows.h> |
+#else |
+#include <pthread.h> |
+#endif |
+ |
+namespace pp { |
+ |
+/// A simple wrapper around a platform-specific lock. See also AutoLock. |
+class Lock { |
+ public: |
+ /// Creates a lock in the "not held" state. |
+ Lock(); |
+ |
+ /// Destroys the lock. |
+ ~Lock(); |
+ |
+ /// Acquires the lock, blocking if it's already held by a different thread. |
+ /// The lock must not already be held on the current thread (i.e. recursive |
+ /// locks are not supported). |
+ /// |
+ /// Most callers should consider using an AucoLock instead to automatically |
viettrungluu
2012/07/10 22:47:58
s/Auco/Auto
|
+ /// acquire and release the lock. |
+ void Acquire(); |
+ |
+ /// Releases the lock. This must be paired with a call to Acquire(). |
+ void Release(); |
+ |
+ private: |
+#if defined(WIN32) |
+ typedef CRITICAL_SECTION OSLockType; |
+#else |
+ typedef pthread_mutex_t OSLockType; |
+#endif |
+ |
+ OSLockType os_lock_; |
+ |
+ // Copy and assign not supported. |
+ Lock(const Lock&); |
+ Lock& operator=(const Lock&); |
+}; |
+ |
+/// A helper class that scopes holding a lock. |
+/// |
+/// @code |
+/// class MyClass { |
+/// public: |
+/// void DoSomething() { |
+/// pp::AutoLock lock(lock_); |
+/// ...do something with the lock held... |
+/// } |
+/// |
+/// private: |
+/// pp::Lock lock_; |
+/// }; |
+/// @endcode |
+class AutoLock { |
+ public: |
+ explicit AutoLock(Lock& lock) : lock_(lock) { |
+ lock_.Acquire(); |
viettrungluu
2012/07/10 22:47:58
Indentation.
|
+ } |
+ |
+ ~AutoLock() { |
+ lock_.Release(); |
+ } |
+ |
+ private: |
+ Lock& lock_; |
+ |
+ // Copy and assign not supported. |
+ AutoLock(const AutoLock&); |
+ AutoLock& operator=(const AutoLock&); |
+}; |
+ |
+} // namespace pp |
+ |
+#endif // PPAPI_UTILITY_THREADING_LOCK_H_ |