liuxiaolong
2021-07-20 58d904a328c0d849769b483e901a0be9426b8209
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#ifndef BOOST_THREAD_DETAIL_THREAD_SAFETY_HPP
#define BOOST_THREAD_DETAIL_THREAD_SAFETY_HPP
 
#if defined(__GNUC__) && !defined(__GXX_EXPERIMENTAL_CXX0X__)
//
// This is horrible, but it seems to be the only we can shut up the
// "anonymous variadic macros were introduced in C99 [-Wvariadic-macros]"
// warning that get spewed out otherwise in non-C++11 mode.
//
#pragma GCC system_header
#endif
 
// See https://clang.llvm.org/docs/ThreadSafetyAnalysis.html
 
// Un-comment to enable Thread Safety Analysis
//#define BOOST_THREAD_ENABLE_THREAD_SAFETY_ANALYSIS
 
// Enable thread safety attributes only with clang.
// The attributes can be safely erased when compiling with other compilers.
#if defined (BOOST_THREAD_ENABLE_THREAD_SAFETY_ANALYSIS) && defined(__clang__) && (!defined(SWIG))
#define BOOST_THREAD_ANNOTATION_ATTRIBUTE__(x)   __attribute__((x))
#else
#define BOOST_THREAD_ANNOTATION_ATTRIBUTE__(x)   // no-op
#endif
 
#define BOOST_THREAD_CAPABILITY(x) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(capability(x))
 
#define BOOST_THREAD_SCOPED_CAPABILITY \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
 
#define BOOST_THREAD_GUARDED_BY(x) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))
 
#define BOOST_THREAD_PT_GUARDED_BY(x) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x))
 
#define BOOST_THREAD_ACQUIRED_BEFORE(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__))
 
#define BOOST_THREAD_ACQUIRED_AFTER(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__))
 
#define BOOST_THREAD_REQUIRES(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(__VA_ARGS__))
 
#define BOOST_THREAD_REQUIRES_SHARED(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(requires_shared_capability(__VA_ARGS__))
 
#define BOOST_THREAD_ACQUIRE(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(__VA_ARGS__))
 
#define BOOST_THREAD_ACQUIRE_SHARED(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(acquire_shared_capability(__VA_ARGS__))
 
#define BOOST_THREAD_RELEASE(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(release_capability(__VA_ARGS__))
 
#define BOOST_THREAD_RELEASE_SHARED(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(__VA_ARGS__))
 
#define BOOST_THREAD_TRY_ACQUIRE(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(__VA_ARGS__))
 
#define BOOST_THREAD_TRY_ACQUIRE_SHARED(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_shared_capability(__VA_ARGS__))
 
#define BOOST_THREAD_EXCLUDES(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
 
#define BOOST_THREAD_ASSERT_CAPABILITY(x) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_capability(x))
 
#define BOOST_THREAD_ASSERT_SHARED_CAPABILITY(x) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_capability(x))
 
#define BOOST_THREAD_RETURN_CAPABILITY(x) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
 
#define BOOST_THREAD_NO_THREAD_SAFETY_ANALYSIS \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)
 
#if defined(__clang__) && (!defined(SWIG)) && defined(__FreeBSD__)
#if __has_attribute(no_thread_safety_analysis)
#define BOOST_THREAD_DISABLE_THREAD_SAFETY_ANALYSIS __attribute__((no_thread_safety_analysis))
#else
#define BOOST_THREAD_DISABLE_THREAD_SAFETY_ANALYSIS
#endif
#else
#define BOOST_THREAD_DISABLE_THREAD_SAFETY_ANALYSIS
#endif
 
#ifdef USE_LOCK_STYLE_THREAD_SAFETY_ATTRIBUTES
// The original version of thread safety analysis the following attribute
// definitions.  These use a lock-based terminology.  They are still in use
// by existing thread safety code, and will continue to be supported.
 
// Deprecated.
#define BOOST_THREAD_PT_GUARDED_VAR \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_var)
 
// Deprecated.
#define BOOST_THREAD_GUARDED_VAR \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(guarded_var)
 
// Replaced by REQUIRES
#define BOOST_THREAD_EXCLUSIVE_LOCKS_REQUIRED(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_locks_required(__VA_ARGS__))
 
// Replaced by REQUIRES_SHARED
#define BOOST_THREAD_SHARED_LOCKS_REQUIRED(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(shared_locks_required(__VA_ARGS__))
 
// Replaced by CAPABILITY
#define BOOST_THREAD_LOCKABLE \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(lockable)
 
// Replaced by SCOPED_CAPABILITY
#define BOOST_THREAD_SCOPED_LOCKABLE \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
 
// Replaced by ACQUIRE
#define BOOST_THREAD_EXCLUSIVE_LOCK_FUNCTION(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock_function(__VA_ARGS__))
 
// Replaced by ACQUIRE_SHARED
#define BOOST_THREAD_SHARED_LOCK_FUNCTION(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(shared_lock_function(__VA_ARGS__))
 
// Replaced by RELEASE and RELEASE_SHARED
#define BOOST_THREAD_UNLOCK_FUNCTION(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(unlock_function(__VA_ARGS__))
 
// Replaced by TRY_ACQUIRE
#define BOOST_THREAD_EXCLUSIVE_TRYLOCK_FUNCTION(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_trylock_function(__VA_ARGS__))
 
// Replaced by TRY_ACQUIRE_SHARED
#define BOOST_THREAD_SHARED_TRYLOCK_FUNCTION(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(shared_trylock_function(__VA_ARGS__))
 
// Replaced by ASSERT_CAPABILITY
#define BOOST_THREAD_ASSERT_EXCLUSIVE_LOCK(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_exclusive_lock(__VA_ARGS__))
 
// Replaced by ASSERT_SHARED_CAPABILITY
#define BOOST_THREAD_ASSERT_SHARED_LOCK(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_lock(__VA_ARGS__))
 
// Replaced by EXCLUDE_CAPABILITY.
#define BOOST_THREAD_LOCKS_EXCLUDED(...) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
 
// Replaced by RETURN_CAPABILITY
#define BOOST_THREAD_LOCK_RETURNED(x) \
  BOOST_THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
 
#endif  // USE_LOCK_STYLE_THREAD_SAFETY_ATTRIBUTES
 
#endif  // BOOST_THREAD_DETAIL_THREAD_SAFETY_HPP