ROOT
master
Reference Guide
Loading...
Searching...
No Matches
TSpinMutex.hxx
Go to the documentation of this file.
1
// @(#)root/thread
2
// Author: Danilo Piparo, 2016
3
4
/*************************************************************************
5
* Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6
* All rights reserved. *
7
* *
8
* For the licensing terms see $ROOTSYS/LICENSE. *
9
* For the list of contributors see $ROOTSYS/README/CREDITS. *
10
*************************************************************************/
11
12
#ifndef ROOT_TSpinMutex
13
#define ROOT_TSpinMutex
14
15
#include <atomic>
16
17
namespace
ROOT
{
18
19
/**
20
* \class ROOT::TSpinMutex
21
* \brief A spin mutex class which respects the STL interface for mutexes.
22
* \ingroup Parallelism
23
* This class allows to acquire spin locks also in combination with templates in the STL such as
24
* <a href="http://en.cppreference.com/w/cpp/thread/unique_lock">std::unique_lock</a> or
25
* <a href="http://en.cppreference.com/w/cpp/thread/condition_variable_any">std::condition_variable_any</a>.
26
* For example:
27
*
28
* ~~~ {.cpp}
29
* ROOT::TSpinMutex m;
30
* std::condition_variable cv;
31
* bool ready = false;
32
*
33
* void worker_thread()
34
* {
35
* // Wait until main() sends data
36
* std::unique_lock<ROOT::TSpinMutex> lk(m);
37
* cv.wait(lk, []{return ready;});
38
* [...]
39
* }
40
* ~~~ {.cpp}
41
*/
42
class
TSpinMutex
{
43
44
private
:
45
std::atomic_flag
fAFlag
=
ATOMIC_FLAG_INIT
;
46
47
public
:
48
TSpinMutex
() =
default
;
49
TSpinMutex
(
const
TSpinMutex
&) =
delete
;
50
~TSpinMutex
() =
default
;
51
TSpinMutex
&
operator=
(
const
TSpinMutex
&) =
delete
;
52
53
void
lock
() {
while
(
fAFlag
.test_and_set(std::memory_order_acquire)); }
54
void
unlock
() {
fAFlag
.clear(std::memory_order_release); }
55
bool
try_lock
() {
return
!
fAFlag
.test_and_set(std::memory_order_acquire); }
56
57
};
58
}
59
60
#endif
TRangeDynCast
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Definition
TCollection.h:358
ROOT::TSpinMutex
A spin mutex class which respects the STL interface for mutexes.
Definition
TSpinMutex.hxx:42
ROOT::TSpinMutex::TSpinMutex
TSpinMutex()=default
ROOT::TSpinMutex::try_lock
bool try_lock()
Definition
TSpinMutex.hxx:55
ROOT::TSpinMutex::lock
void lock()
Definition
TSpinMutex.hxx:53
ROOT::TSpinMutex::unlock
void unlock()
Definition
TSpinMutex.hxx:54
ROOT::TSpinMutex::TSpinMutex
TSpinMutex(const TSpinMutex &)=delete
ROOT::TSpinMutex::fAFlag
std::atomic_flag fAFlag
Definition
TSpinMutex.hxx:45
ROOT::TSpinMutex::~TSpinMutex
~TSpinMutex()=default
ROOT::TSpinMutex::operator=
TSpinMutex & operator=(const TSpinMutex &)=delete
ROOT
Namespace for new ROOT classes and functions.
Definition
EExecutionPolicy.hxx:4
core
thread
inc
ROOT
TSpinMutex.hxx
ROOT master - Reference Guide Generated on Mon Sep 1 2025 04:34:52 (GVA Time) using Doxygen 1.10.0