Lunchbox  1.17.0
Multi-threaded C++ toolbox library for all application developers creating high-performance multi-threaded programs.
spinLock.h
1 
2 /* Copyright (c) 2010-2017, Stefan Eilemann <eile@equalizergraphics.com>
3  *
4  * This library is free software; you can redistribute it and/or modify it under
5  * the terms of the GNU Lesser General Public License version 2.1 as published
6  * by the Free Software Foundation.
7  *
8  * This library is distributed in the hope that it will be useful, but WITHOUT
9  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10  * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
11  * details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this library; if not, write to the Free Software Foundation, Inc.,
15  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16  */
17 
18 #ifndef LUNCHBOX_SPINLOCK_H
19 #define LUNCHBOX_SPINLOCK_H
20 
21 #include <lunchbox/atomic.h> // member
22 #include <lunchbox/thread.h> // used in inline method
23 
24 #include <memory>
25 
26 namespace lunchbox
27 {
38 class SpinLock : public boost::noncopyable
39 {
40 public:
42  LUNCHBOX_API SpinLock();
43 
45  LUNCHBOX_API ~SpinLock();
46 
48  LUNCHBOX_API void set();
49  void lock() { set(); }
51  LUNCHBOX_API void unset();
52  void unlock() { unset(); }
59  LUNCHBOX_API bool trySet();
60 
62  LUNCHBOX_API void setRead();
63  void lock_shared() { setRead(); }
65  LUNCHBOX_API void unsetRead();
66  void unlock_shared() { unsetRead(); }
73  LUNCHBOX_API bool trySetRead();
74 
81  LUNCHBOX_API bool isSet();
82 
89  LUNCHBOX_API bool isSetWrite();
90 
97  LUNCHBOX_API bool isSetRead();
98 
99 private:
100  class Impl;
101  std::unique_ptr<Impl> _impl;
102 
103  SpinLock(const SpinLock&) = delete;
104  SpinLock(SpinLock&&) = delete;
105  SpinLock& operator=(const SpinLock&) = delete;
106  SpinLock& operator=(SpinLock&&) = delete;
107 };
108 }
109 #endif // LUNCHBOX_SPINLOCK_H
bool trySetRead()
Attempt to acquire the lock shared with other readers.
A fast lock for uncontended memory access.
Definition: spinLock.h:38
bool isSetWrite()
Test if the lock is set exclusively.
bool trySet()
Attempt to acquire the lock exclusively.
void setRead()
Acquire the lock shared with other readers.
void unset()
Release an exclusive lock.
bool isSetRead()
Test if the lock is set shared.
~SpinLock()
Destruct the lock.
bool isSet()
Test if the lock is set.
Abstraction layer and common utilities for multi-threaded programming.
Definition: algorithm.h:29
void unsetRead()
Release a shared read lock.
SpinLock()
Construct a new lock.