| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | #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
 |