ROOT
6.07/01
Reference Guide
ROOT Home Page
Main Page
Tutorials
User's Classes
Namespaces
All Classes
Files
Release Notes
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Groups
Pages
core
thread
inc
TAtomicCountGcc.h
Go to the documentation of this file.
1
// @(#)root/thread:$Id$
2
// Author: Fons Rademakers 14/11/06
3
4
/*************************************************************************
5
* Copyright (C) 1995-2006, 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_TAtomicCountGcc
13
#define ROOT_TAtomicCountGcc
14
15
16
//////////////////////////////////////////////////////////////////////////
17
// //
18
// TAtomicCountGcc //
19
// //
20
// Class providing atomic operations on a long. Setting, getting, //
21
// incrementing and decrementing are atomic, thread safe, operations. //
22
// //
23
// This implementation uses GNU libstdc++ v3 atomic primitives, see //
24
// http://gcc.gnu.org/onlinedocs/porting/Thread-safety.html. //
25
// //
26
// ATTENTION: Don't use this file directly, it is included by //
27
// TAtomicCount.h. //
28
// //
29
//////////////////////////////////////////////////////////////////////////
30
31
#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 2) || \
32
(defined(__APPLE_CC__) && __APPLE_CC__ > 5000 && !defined(MAC_OS_X_VERSION_10_6))
33
#include <bits/atomicity.h>
34
#else
35
#include <ext/atomicity.h>
36
#endif
37
38
#if defined(__GLIBCXX__) // g++ 3.4+
39
40
using
__gnu_cxx::__atomic_add;
41
using
__gnu_cxx::__exchange_and_add;
42
43
#endif
44
45
46
class
TAtomicCount
{
47
private
:
48
mutable
_Atomic_word
fCnt
;
// counter
49
50
TAtomicCount
(
const
TAtomicCount
&);
// not implemented
51
TAtomicCount
&
operator=
(
const
TAtomicCount
&);
// not implemented
52
53
public
:
54
explicit
TAtomicCount
(
Long_t
v
) :
fCnt
(v) { }
55
void
operator++
() { __atomic_add(&
fCnt
, 1); }
56
Long_t
operator--
() {
return
__exchange_and_add(&
fCnt
, -1) - 1; }
57
operator
long()
const
{
return
__exchange_and_add(&
fCnt
, 0); }
58
void
Set
(
Long_t
v
) {
59
fCnt
=
v
;
60
#ifdef _GLIBCXX_WRITE_MEM_BARRIER
61
#if !(defined(__INTEL_COMPILER) && defined(__ia64__)) //ICC doesn't support inline asm on IA-64
62
_GLIBCXX_WRITE_MEM_BARRIER;
63
#endif
64
#endif
65
}
66
Long_t
Get
()
const
{
return
__exchange_and_add(&
fCnt
, 0); }
67
};
68
69
#endif
TAtomicCount::operator--
Long_t operator--()
Definition:
TAtomicCountGcc.h:56
TAtomicCount
Definition:
TAtomicCount.h:71
v
SVector< double, 2 > v
Definition:
Dict.h:5
TAtomicCount::Set
void Set(Long_t v)
Definition:
TAtomicCountGcc.h:58
TAtomicCount::TAtomicCount
TAtomicCount(Long_t v)
Definition:
TAtomicCountGcc.h:54
Long_t
long Long_t
Definition:
RtypesCore.h:50
TAtomicCount::fCnt
Long_t fCnt
Definition:
TAtomicCount.h:73
TAtomicCount::operator=
TAtomicCount & operator=(const TAtomicCount &)
TAtomicCount::Get
Long_t Get() const
Definition:
TAtomicCountGcc.h:66
TAtomicCount::TAtomicCount
TAtomicCount(const TAtomicCount &)
TAtomicCount::fCnt
_Atomic_word fCnt
Definition:
TAtomicCountGcc.h:48
TAtomicCount::operator++
void operator++()
Definition:
TAtomicCountGcc.h:55