File indexing completed on 2025-12-16 10:10:00
0001 #ifndef BOOST_THREAD_DETAIL_THREAD_SAFETY_HPP
0002 #define BOOST_THREAD_DETAIL_THREAD_SAFETY_HPP
0003
0004 #if defined(__GNUC__) && !defined(__GXX_EXPERIMENTAL_CXX0X__)
0005
0006
0007
0008
0009
0010 #pragma GCC system_header
0011 #endif
0012
0013
0014
0015
0016
0017
0018
0019
0020 #if defined (BOOST_THREAD_ENABLE_THREAD_SAFETY_ANALYSIS) && defined(__clang__) && (!defined(SWIG))
0021 #define BOOST_THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x))
0022 #else
0023 #define BOOST_THREAD_ANNOTATION_ATTRIBUTE__(x)
0024 #endif
0025
0026 #define BOOST_THREAD_CAPABILITY(x) \
0027 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(capability(x))
0028
0029 #define BOOST_THREAD_SCOPED_CAPABILITY \
0030 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
0031
0032 #define BOOST_THREAD_GUARDED_BY(x) \
0033 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))
0034
0035 #define BOOST_THREAD_PT_GUARDED_BY(x) \
0036 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x))
0037
0038 #define BOOST_THREAD_ACQUIRED_BEFORE(...) \
0039 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__))
0040
0041 #define BOOST_THREAD_ACQUIRED_AFTER(...) \
0042 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__))
0043
0044 #define BOOST_THREAD_REQUIRES(...) \
0045 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(__VA_ARGS__))
0046
0047 #define BOOST_THREAD_REQUIRES_SHARED(...) \
0048 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(requires_shared_capability(__VA_ARGS__))
0049
0050 #define BOOST_THREAD_ACQUIRE(...) \
0051 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(__VA_ARGS__))
0052
0053 #define BOOST_THREAD_ACQUIRE_SHARED(...) \
0054 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(acquire_shared_capability(__VA_ARGS__))
0055
0056 #define BOOST_THREAD_RELEASE(...) \
0057 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(release_capability(__VA_ARGS__))
0058
0059 #define BOOST_THREAD_RELEASE_SHARED(...) \
0060 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(__VA_ARGS__))
0061
0062 #define BOOST_THREAD_TRY_ACQUIRE(...) \
0063 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(__VA_ARGS__))
0064
0065 #define BOOST_THREAD_TRY_ACQUIRE_SHARED(...) \
0066 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_shared_capability(__VA_ARGS__))
0067
0068 #define BOOST_THREAD_EXCLUDES(...) \
0069 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
0070
0071 #define BOOST_THREAD_ASSERT_CAPABILITY(x) \
0072 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_capability(x))
0073
0074 #define BOOST_THREAD_ASSERT_SHARED_CAPABILITY(x) \
0075 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_capability(x))
0076
0077 #define BOOST_THREAD_RETURN_CAPABILITY(x) \
0078 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
0079
0080 #define BOOST_THREAD_NO_THREAD_SAFETY_ANALYSIS \
0081 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)
0082
0083 #if defined(__clang__) && (!defined(SWIG)) && defined(__FreeBSD__)
0084 #if __has_attribute(no_thread_safety_analysis)
0085 #define BOOST_THREAD_DISABLE_THREAD_SAFETY_ANALYSIS __attribute__((no_thread_safety_analysis))
0086 #else
0087 #define BOOST_THREAD_DISABLE_THREAD_SAFETY_ANALYSIS
0088 #endif
0089 #else
0090 #define BOOST_THREAD_DISABLE_THREAD_SAFETY_ANALYSIS
0091 #endif
0092
0093 #ifdef USE_LOCK_STYLE_THREAD_SAFETY_ATTRIBUTES
0094
0095
0096
0097
0098
0099 #define BOOST_THREAD_PT_GUARDED_VAR \
0100 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_var)
0101
0102
0103 #define BOOST_THREAD_GUARDED_VAR \
0104 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(guarded_var)
0105
0106
0107 #define BOOST_THREAD_EXCLUSIVE_LOCKS_REQUIRED(...) \
0108 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_locks_required(__VA_ARGS__))
0109
0110
0111 #define BOOST_THREAD_SHARED_LOCKS_REQUIRED(...) \
0112 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(shared_locks_required(__VA_ARGS__))
0113
0114
0115 #define BOOST_THREAD_LOCKABLE \
0116 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(lockable)
0117
0118
0119 #define BOOST_THREAD_SCOPED_LOCKABLE \
0120 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
0121
0122
0123 #define BOOST_THREAD_EXCLUSIVE_LOCK_FUNCTION(...) \
0124 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock_function(__VA_ARGS__))
0125
0126
0127 #define BOOST_THREAD_SHARED_LOCK_FUNCTION(...) \
0128 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(shared_lock_function(__VA_ARGS__))
0129
0130
0131 #define BOOST_THREAD_UNLOCK_FUNCTION(...) \
0132 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(unlock_function(__VA_ARGS__))
0133
0134
0135 #define BOOST_THREAD_EXCLUSIVE_TRYLOCK_FUNCTION(...) \
0136 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_trylock_function(__VA_ARGS__))
0137
0138
0139 #define BOOST_THREAD_SHARED_TRYLOCK_FUNCTION(...) \
0140 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(shared_trylock_function(__VA_ARGS__))
0141
0142
0143 #define BOOST_THREAD_ASSERT_EXCLUSIVE_LOCK(...) \
0144 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_exclusive_lock(__VA_ARGS__))
0145
0146
0147 #define BOOST_THREAD_ASSERT_SHARED_LOCK(...) \
0148 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_lock(__VA_ARGS__))
0149
0150
0151 #define BOOST_THREAD_LOCKS_EXCLUDED(...) \
0152 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
0153
0154
0155 #define BOOST_THREAD_LOCK_RETURNED(x) \
0156 BOOST_THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
0157
0158 #endif
0159
0160 #endif