summaryrefslogtreecommitdiff
path: root/src/mongo/util/concurrency/spin_lock.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/util/concurrency/spin_lock.h')
-rw-r--r--src/mongo/util/concurrency/spin_lock.h116
1 files changed, 68 insertions, 48 deletions
diff --git a/src/mongo/util/concurrency/spin_lock.h b/src/mongo/util/concurrency/spin_lock.h
index 782edd4f026..e56458d6cf8 100644
--- a/src/mongo/util/concurrency/spin_lock.h
+++ b/src/mongo/util/concurrency/spin_lock.h
@@ -38,58 +38,78 @@
namespace mongo {
- /**
- * The spinlock currently requires late GCC support routines to be efficient.
- * Other platforms default to a mutex implemenation.
- */
- class SpinLock {
- MONGO_DISALLOW_COPYING(SpinLock);
- public:
- SpinLock();
- ~SpinLock();
-
- static bool isfast(); // true if a real spinlock on this platform
-
- private:
+/**
+ * The spinlock currently requires late GCC support routines to be efficient.
+ * Other platforms default to a mutex implemenation.
+ */
+class SpinLock {
+ MONGO_DISALLOW_COPYING(SpinLock);
+
+public:
+ SpinLock();
+ ~SpinLock();
+
+ static bool isfast(); // true if a real spinlock on this platform
+
+private:
#if defined(_WIN32)
- CRITICAL_SECTION _cs;
- public:
- void lock() {EnterCriticalSection(&_cs); }
- void unlock() { LeaveCriticalSection(&_cs); }
+ CRITICAL_SECTION _cs;
+
+public:
+ void lock() {
+ EnterCriticalSection(&_cs);
+ }
+ void unlock() {
+ LeaveCriticalSection(&_cs);
+ }
#elif defined(__USE_XOPEN2K)
- pthread_spinlock_t _lock;
- void _lk();
- public:
- void unlock() { pthread_spin_unlock(&_lock); }
- void lock() {
- if ( MONGO_likely( pthread_spin_trylock( &_lock ) == 0 ) )
- return;
- _lk();
- }
+ pthread_spinlock_t _lock;
+ void _lk();
+
+public:
+ void unlock() {
+ pthread_spin_unlock(&_lock);
+ }
+ void lock() {
+ if (MONGO_likely(pthread_spin_trylock(&_lock) == 0))
+ return;
+ _lk();
+ }
#elif defined(__GCC_HAVE_SYNC_COMPARE_AND_SWAP_4)
- volatile bool _locked;
- public:
- void unlock() {__sync_lock_release(&_locked); }
- void lock();
+ volatile bool _locked;
+
+public:
+ void unlock() {
+ __sync_lock_release(&_locked);
+ }
+ void lock();
#else
- // default to a mutex if not implemented
- SimpleMutex _mutex;
- public:
- void unlock() { _mutex.unlock(); }
- void lock() { _mutex.lock(); }
+ // default to a mutex if not implemented
+ SimpleMutex _mutex;
+
+public:
+ void unlock() {
+ _mutex.unlock();
+ }
+ void lock() {
+ _mutex.lock();
+ }
#endif
- };
-
- class scoped_spinlock {
- MONGO_DISALLOW_COPYING(scoped_spinlock);
- public:
- scoped_spinlock( SpinLock& l ) : _l(l) {
- _l.lock();
- }
- ~scoped_spinlock() {
- _l.unlock();}
- private:
- SpinLock& _l;
- };
+};
+
+class scoped_spinlock {
+ MONGO_DISALLOW_COPYING(scoped_spinlock);
+
+public:
+ scoped_spinlock(SpinLock& l) : _l(l) {
+ _l.lock();
+ }
+ ~scoped_spinlock() {
+ _l.unlock();
+ }
+
+private:
+ SpinLock& _l;
+};
} // namespace mongo