Master Core
v0.0.9 - 49a5c0d97abf09ef2911ddfe8d9551df59f9efd3-dirty
Main Page
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
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
6
#ifndef BITCOIN_THREADSAFETY_H
7
#define BITCOIN_THREADSAFETY_H
8
9
#ifdef __clang__
10
// TL;DR Add GUARDED_BY(mutex) to member variables. The others are
11
// rarely necessary. Ex: int nFoo GUARDED_BY(cs_foo);
12
//
13
// See http://clang.llvm.org/docs/LanguageExtensions.html#threadsafety
14
// for documentation. The clang compiler can do advanced static analysis
15
// of locking when given the -Wthread-safety option.
16
#define LOCKABLE __attribute__ ((lockable))
17
#define SCOPED_LOCKABLE __attribute__ ((scoped_lockable))
18
#define GUARDED_BY(x) __attribute__ ((guarded_by(x)))
19
#define GUARDED_VAR __attribute__ ((guarded_var))
20
#define PT_GUARDED_BY(x) __attribute__ ((pt_guarded_by(x)))
21
#define PT_GUARDED_VAR __attribute__ ((pt_guarded_var))
22
#define ACQUIRED_AFTER(...) __attribute__ ((acquired_after(__VA_ARGS__)))
23
#define ACQUIRED_BEFORE(...) __attribute__ ((acquired_before(__VA_ARGS__)))
24
#define EXCLUSIVE_LOCK_FUNCTION(...) __attribute__ ((exclusive_lock_function(__VA_ARGS__)))
25
#define SHARED_LOCK_FUNCTION(...) __attribute__ ((shared_lock_function(__VA_ARGS__)))
26
#define EXCLUSIVE_TRYLOCK_FUNCTION(...) __attribute__ ((exclusive_trylock_function(__VA_ARGS__)))
27
#define SHARED_TRYLOCK_FUNCTION(...) __attribute__ ((shared_trylock_function(__VA_ARGS__)))
28
#define UNLOCK_FUNCTION(...) __attribute__ ((unlock_function(__VA_ARGS__)))
29
#define LOCK_RETURNED(x) __attribute__ ((lock_returned(x)))
30
#define LOCKS_EXCLUDED(...) __attribute__ ((locks_excluded(__VA_ARGS__)))
31
#define EXCLUSIVE_LOCKS_REQUIRED(...) __attribute__ ((exclusive_locks_required(__VA_ARGS__)))
32
#define SHARED_LOCKS_REQUIRED(...) __attribute__ ((shared_locks_required(__VA_ARGS__)))
33
#define NO_THREAD_SAFETY_ANALYSIS __attribute__ ((no_thread_safety_analysis))
34
#else
35
#define LOCKABLE
36
#define SCOPED_LOCKABLE
37
#define GUARDED_BY(x)
38
#define GUARDED_VAR
39
#define PT_GUARDED_BY(x)
40
#define PT_GUARDED_VAR
41
#define ACQUIRED_AFTER(...)
42
#define ACQUIRED_BEFORE(...)
43
#define EXCLUSIVE_LOCK_FUNCTION(...)
44
#define SHARED_LOCK_FUNCTION(...)
45
#define EXCLUSIVE_TRYLOCK_FUNCTION(...)
46
#define SHARED_TRYLOCK_FUNCTION(...)
47
#define UNLOCK_FUNCTION(...)
48
#define LOCK_RETURNED(x)
49
#define LOCKS_EXCLUDED(...)
50
#define EXCLUSIVE_LOCKS_REQUIRED(...)
51
#define SHARED_LOCKS_REQUIRED(...)
52
#define NO_THREAD_SAFETY_ANALYSIS
53
#endif // __GNUC__
54
#endif // BITCOIN_THREADSAFETY_H
Generated on Sun Jan 4 2015 09:04:47 for Master Core by
1.8.8