diff options
author | Simon Marlow <marlowsd@gmail.com> | 2011-02-02 11:32:42 +0000 |
---|---|---|
committer | Simon Marlow <marlowsd@gmail.com> | 2011-02-02 11:32:42 +0000 |
commit | d52d50e40e06d7a74aa7725e7a1a89a0cf2d98a2 (patch) | |
tree | 97a647b55acf37ac244381cbb6648650b70a52df /includes | |
parent | 329077220af83860d5dd6891649cb1058b5bbaa6 (diff) | |
download | haskell-d52d50e40e06d7a74aa7725e7a1a89a0cf2d98a2.tar.gz |
add TRY_ACQUIRE_LOCK()
Diffstat (limited to 'includes')
-rw-r--r-- | includes/rts/OSThreads.h | 13 |
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. |