Index: src/platform.h |
=================================================================== |
--- src/platform.h (revision 11005) |
+++ src/platform.h (working copy) |
@@ -79,6 +79,7 @@ |
#endif // WIN32 |
#include "atomicops.h" |
+#include "lazy-instance.h" |
#include "platform-tls.h" |
#include "utils.h" |
#include "v8globals.h" |
@@ -528,7 +529,25 @@ |
virtual bool TryLock() = 0; |
}; |
+struct CreateMutexTrait { |
+ static Mutex* Create() { |
+ return OS::CreateMutex(); |
+ } |
+}; |
+// POD Mutex initialized lazily (i.e. the first time Pointer() is called). |
+// Usage: |
+// static LazyMutex my_mutex = LAZY_MUTEX_INITIALIZER; |
+// |
+// void my_function() { |
+// ScopedLock my_lock(my_mutex.Pointer()); |
+// // Do something. |
+// } |
+// |
+typedef LazyDynamicInstance<Mutex, CreateMutexTrait>::type LazyMutex; |
+ |
+#define LAZY_MUTEX_INITIALIZER LAZY_DYNAMIC_INSTANCE_INITIALIZER |
+ |
// ---------------------------------------------------------------------------- |
// ScopedLock |
// |
@@ -577,7 +596,31 @@ |
virtual void Signal() = 0; |
}; |
+template <int InitialValue> |
+struct CreateSemaphoreTrait { |
+ static Semaphore* Create() { |
+ return OS::CreateSemaphore(InitialValue); |
+ } |
+}; |
+// POD Semaphore initialized lazily (i.e. the first time Pointer() is called). |
+// Usage: |
+// // The following semaphore starts at 0. |
+// static LazySemaphore<0>::type my_semaphore = LAZY_SEMAPHORE_INITIALIZER; |
+// |
+// void my_function() { |
+// // Do something with my_semaphore.Pointer(). |
+// } |
+// |
+template <int InitialValue> |
+struct LazySemaphore { |
+ typedef typename LazyDynamicInstance< |
+ Semaphore, CreateSemaphoreTrait<InitialValue> >::type type; |
+}; |
+ |
+#define LAZY_SEMAPHORE_INITIALIZER LAZY_DYNAMIC_INSTANCE_INITIALIZER |
+ |
+ |
// ---------------------------------------------------------------------------- |
// Socket |
// |