summaryrefslogtreecommitdiff
path: root/includes
diff options
context:
space:
mode:
authorSimon Marlow <marlowsd@gmail.com>2011-02-02 11:32:42 +0000
committerSimon Marlow <marlowsd@gmail.com>2011-02-02 11:32:42 +0000
commitd52d50e40e06d7a74aa7725e7a1a89a0cf2d98a2 (patch)
tree97a647b55acf37ac244381cbb6648650b70a52df /includes
parent329077220af83860d5dd6891649cb1058b5bbaa6 (diff)
downloadhaskell-d52d50e40e06d7a74aa7725e7a1a89a0cf2d98a2.tar.gz
add TRY_ACQUIRE_LOCK()
Diffstat (limited to 'includes')
-rw-r--r--includes/rts/OSThreads.h13
1 files changed, 11 insertions, 2 deletions
diff --git a/includes/rts/OSThreads.h b/includes/rts/OSThreads.h
index 5d3e6ba140..ee59a5f62c 100644
--- a/includes/rts/OSThreads.h
+++ b/includes/rts/OSThreads.h
@@ -53,6 +53,14 @@ typedef pthread_key_t ThreadLocalKey;
barf("multiple ACQUIRE_LOCK: %s %d", __FILE__,__LINE__); \
}
+// Returns zero if the lock was acquired.
+EXTERN_INLINE int TRY_ACQUIRE_LOCK(pthread_mutex_t *mutex);
+EXTERN_INLINE int TRY_ACQUIRE_LOCK(pthread_mutex_t *mutex)
+{
+ LOCK_DEBUG_BELCH("TRY_ACQUIRE_LOCK", mutex);
+ return pthread_mutex_trylock(mutex);
+}
+
#define RELEASE_LOCK(mutex) \
LOCK_DEBUG_BELCH("RELEASE_LOCK", mutex); \
if (pthread_mutex_unlock(mutex) != 0) { \
@@ -117,8 +125,9 @@ typedef CRITICAL_SECTION Mutex;
#else
-#define ACQUIRE_LOCK(mutex) EnterCriticalSection(mutex)
-#define RELEASE_LOCK(mutex) LeaveCriticalSection(mutex)
+#define ACQUIRE_LOCK(mutex) EnterCriticalSection(mutex)
+#define TRY_ACQUIRE_LOCK(mutex) (TryEnterCriticalSection(mutex) != 0)
+#define RELEASE_LOCK(mutex) LeaveCriticalSection(mutex)
// I don't know how to do this. TryEnterCriticalSection() doesn't do
// the right thing.