Feathercoin
0.5.0
P2P Digital Currency
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
src
threadsafety.h
Go to the documentation of this file.
1
// Copyright (c) 2009-2010 Satoshi Nakamoto
2
// Copyright (c) 2009-2012 The Bitcoin developers
3
// Distributed under the MIT/X11 software license, see the accompanying
4
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
#ifndef BITCOIN_THREADSAFETY_H
6
#define BITCOIN_THREADSAFETY_H
7
8
#ifdef __clang__
9
// TL;DR Add GUARDED_BY(mutex) to member variables. The others are
10
// rarely necessary. Ex: int nFoo GUARDED_BY(cs_foo);
11
//
12
// See http://clang.llvm.org/docs/LanguageExtensions.html#threadsafety
13
// for documentation. The clang compiler can do advanced static analysis
14
// of locking when given the -Wthread-safety option.
15
#define LOCKABLE __attribute__ ((lockable))
16
#define SCOPED_LOCKABLE __attribute__ ((scoped_lockable))
17
#define GUARDED_BY(x) __attribute__ ((guarded_by(x)))
18
#define GUARDED_VAR __attribute__ ((guarded_var))
19
#define PT_GUARDED_BY(x) __attribute__ ((pt_guarded_by(x)))
20
#define PT_GUARDED_VAR __attribute__ ((pt_guarded_var))
21
#define ACQUIRED_AFTER(...) __attribute__ ((acquired_after(__VA_ARGS__)))
22
#define ACQUIRED_BEFORE(...) __attribute__ ((acquired_before(__VA_ARGS__)))
23
#define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__ ((exclusive_lock_function(__VA_ARGS__)))
24
#define SHARED_LOCK_FUNCTION(...) __attribute__ ((shared_lock_function(__VA_ARGS__)))
25
#define EXCLUSIVE_TRYLOCK_FUNCTION(...) __attribute__ ((exclusive_trylock_function(__VA_ARGS__)))
26
#define SHARED_TRYLOCK_FUNCTION(...) __attribute__ ((shared_trylock_function(__VA_ARGS__)))
27
#define UNLOCK_FUNCTION(...) __attribute__ ((unlock_function(__VA_ARGS__)))
28
#define LOCK_RETURNED(x) __attribute__ ((lock_returned(x)))
29
#define LOCKS_EXCLUDED(...) __attribute__ ((locks_excluded(__VA_ARGS__)))
30
#define EXCLUSIVE_LOCKS_REQUIRED(...) __attribute__ ((exclusive_locks_required(__VA_ARGS__)))
31
#define SHARED_LOCKS_REQUIRED(...) __attribute__ ((shared_locks_required(__VA_ARGS__)))
32
#define NO_THREAD_SAFETY_ANALYSIS __attribute__ ((no_thread_safety_analysis))
33
#else
34
#define LOCKABLE
35
#define SCOPED_LOCKABLE
36
#define GUARDED_BY(x)
37
#define GUARDED_VAR
38
#define PT_GUARDED_BY(x)
39
#define PT_GUARDED_VAR
40
#define ACQUIRED_AFTER(...)
41
#define ACQUIRED_BEFORE(...)
42
#define EXCLUSIVE_LOCK_FUNCTION(...)
43
#define SHARED_LOCK_FUNCTION(...)
44
#define EXCLUSIVE_TRYLOCK_FUNCTION(...)
45
#define SHARED_TRYLOCK_FUNCTION(...)
46
#define UNLOCK_FUNCTION(...)
47
#define LOCK_RETURNED(x)
48
#define LOCKS_EXCLUDED(...)
49
#define EXCLUSIVE_LOCKS_REQUIRED(...)
50
#define SHARED_LOCKS_REQUIRED(...)
51
#define NO_THREAD_SAFETY_ANALYSIS
52
#endif // __GNUC__
53
#endif // BITCOIN_THREADSAFETY_H
Generated on Thu Sep 11 2014 10:57:09 for Feathercoin by
1.8.8