Master Core
v0.0.9 - 2abfd2849db8ba7a83957c64eb976b406713c123
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
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 Tue Dec 23 2014 23:20:45 for Master Core by
1.8.8