Back to home page

EIC code displayed by LXR

 
 

    


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 // This is horrible, but it seems to be the only we can shut up the
0007 // "anonymous variadic macros were introduced in C99 [-Wvariadic-macros]"
0008 // warning that get spewed out otherwise in non-C++11 mode.
0009 //
0010 #pragma GCC system_header
0011 #endif
0012 
0013 // See https://clang.llvm.org/docs/ThreadSafetyAnalysis.html
0014 
0015 // Un-comment to enable Thread Safety Analysis
0016 //#define BOOST_THREAD_ENABLE_THREAD_SAFETY_ANALYSIS
0017 
0018 // Enable thread safety attributes only with clang.
0019 // The attributes can be safely erased when compiling with other compilers.
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)   // no-op
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 // The original version of thread safety analysis the following attribute
0095 // definitions.  These use a lock-based terminology.  They are still in use
0096 // by existing thread safety code, and will continue to be supported.
0097 
0098 // Deprecated.
0099 #define BOOST_THREAD_PT_GUARDED_VAR \
0100   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_var)
0101 
0102 // Deprecated.
0103 #define BOOST_THREAD_GUARDED_VAR \
0104   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(guarded_var)
0105 
0106 // Replaced by REQUIRES
0107 #define BOOST_THREAD_EXCLUSIVE_LOCKS_REQUIRED(...) \
0108   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_locks_required(__VA_ARGS__))
0109 
0110 // Replaced by REQUIRES_SHARED
0111 #define BOOST_THREAD_SHARED_LOCKS_REQUIRED(...) \
0112   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(shared_locks_required(__VA_ARGS__))
0113 
0114 // Replaced by CAPABILITY
0115 #define BOOST_THREAD_LOCKABLE \
0116   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(lockable)
0117 
0118 // Replaced by SCOPED_CAPABILITY
0119 #define BOOST_THREAD_SCOPED_LOCKABLE \
0120   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
0121 
0122 // Replaced by ACQUIRE
0123 #define BOOST_THREAD_EXCLUSIVE_LOCK_FUNCTION(...) \
0124   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_lock_function(__VA_ARGS__))
0125 
0126 // Replaced by ACQUIRE_SHARED
0127 #define BOOST_THREAD_SHARED_LOCK_FUNCTION(...) \
0128   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(shared_lock_function(__VA_ARGS__))
0129 
0130 // Replaced by RELEASE and RELEASE_SHARED
0131 #define BOOST_THREAD_UNLOCK_FUNCTION(...) \
0132   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(unlock_function(__VA_ARGS__))
0133 
0134 // Replaced by TRY_ACQUIRE
0135 #define BOOST_THREAD_EXCLUSIVE_TRYLOCK_FUNCTION(...) \
0136   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(exclusive_trylock_function(__VA_ARGS__))
0137 
0138 // Replaced by TRY_ACQUIRE_SHARED
0139 #define BOOST_THREAD_SHARED_TRYLOCK_FUNCTION(...) \
0140   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(shared_trylock_function(__VA_ARGS__))
0141 
0142 // Replaced by ASSERT_CAPABILITY
0143 #define BOOST_THREAD_ASSERT_EXCLUSIVE_LOCK(...) \
0144   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_exclusive_lock(__VA_ARGS__))
0145 
0146 // Replaced by ASSERT_SHARED_CAPABILITY
0147 #define BOOST_THREAD_ASSERT_SHARED_LOCK(...) \
0148   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_lock(__VA_ARGS__))
0149 
0150 // Replaced by EXCLUDE_CAPABILITY.
0151 #define BOOST_THREAD_LOCKS_EXCLUDED(...) \
0152   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
0153 
0154 // Replaced by RETURN_CAPABILITY
0155 #define BOOST_THREAD_LOCK_RETURNED(x) \
0156   BOOST_THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
0157 
0158 #endif  // USE_LOCK_STYLE_THREAD_SAFETY_ATTRIBUTES
0159 
0160 #endif  // BOOST_THREAD_DETAIL_THREAD_SAFETY_HPP