X-Git-Url: http://plrg.eecs.uci.edu/git/?p=folly.git;a=blobdiff_plain;f=folly%2FSpinLock.h;h=3df5d4e1c6a10b99f0bb269a937c0bd4fa7cb8af;hp=5ab446056fc781b9a9551d0862f5a05667c9be75;hb=192d78d40551ec5d9aade5ca72dd6e33ad700a2b;hpb=3c4a013ff85c5ff329c7270094f31881629b3581 diff --git a/folly/SpinLock.h b/folly/SpinLock.h index 5ab44605..3df5d4e1 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. @@ -34,19 +34,29 @@ #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 { @@ -64,11 +74,4 @@ class SpinLockGuardImpl : private boost::noncopyable { typedef SpinLockGuardImpl SpinLockGuard; -namespace detail { -template -struct HasLockUnlock; - -template <> -struct HasLockUnlock : public std::true_type {}; -} -} +} // namespace folly