X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2FSpinLock.h;h=b87e58a6ed074415bd230dd21157f06dbb74078e;hp=6d10df4ad4e032aab207d52068a5ffbd9bc59a08;hb=55af3d190b31e6b09943bb6456dc1085688fc007;hpb=ab442ee8766aeac54c1bad394655a48c242c8607 diff --git a/folly/SpinLock.h b/folly/SpinLock.h index 6d10df4a..b87e58a6 100644 --- a/folly/SpinLock.h +++ b/folly/SpinLock.h @@ -1,5 +1,5 @@ /* - * Copyright 2016 Facebook, Inc. + * Copyright 2017 Facebook, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,19 +32,31 @@ #pragma once -#include +#include + +#include +#include namespace folly { -#if __x86_64__ -typedef SpinLockMslImpl SpinLock; -#elif __APPLE__ -typedef SpinLockAppleImpl SpinLock; -#elif FOLLY_HAVE_PTHREAD_SPINLOCK_T -typedef SpinLockPthreadImpl SpinLock; -#else -typedef SpinLockPthreadMutexImpl SpinLock; -#endif +class SpinLock { + public: + FOLLY_ALWAYS_INLINE SpinLock() { + lock_.init(); + } + FOLLY_ALWAYS_INLINE void lock() const { + lock_.lock(); + } + FOLLY_ALWAYS_INLINE void unlock() const { + lock_.unlock(); + } + FOLLY_ALWAYS_INLINE bool try_lock() const { + return lock_.try_lock(); + } + + private: + mutable folly::MicroSpinLock lock_; +}; template class SpinLockGuardImpl : private boost::noncopyable {