Lunchbox  1.13.0
Multi-threaded C++ toolbox library for all application developers creating high-performance multi-threaded programs.
spinLock.h
1 
2 /* Copyright (c) 2010-2015, 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 namespace lunchbox
25 {
26 namespace detail { class SpinLock; }
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 
51  LUNCHBOX_API void unset();
52 
59  LUNCHBOX_API bool trySet();
60 
62  LUNCHBOX_API void setRead();
63 
65  LUNCHBOX_API void unsetRead();
66 
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  detail::SpinLock* const _impl;
101 };
102 }
103 #endif //LUNCHBOX_SPINLOCK_H
bool trySetRead()
Attempt to acquire the lock shared with other readers.
void set()
Acquire the lock exclusively.
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:32
void unsetRead()
Release a shared read lock.
SpinLock()
Construct a new lock.