33 #ifndef _IDENTT_HTTP_MUTEX_HPP_ 34 #define _IDENTT_HTTP_MUTEX_HPP_ 39 #if defined(__clang__) && (!defined(SWIG)) 40 #define THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x)) 42 #define THREAD_ANNOTATION_ATTRIBUTE__(x) // no-op 45 #define CAPABILITY(x) \ 46 THREAD_ANNOTATION_ATTRIBUTE__(capability(x)) 48 #define SCOPED_CAPABILITY \ 49 THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable) 51 #define GUARDED_BY(x) \ 52 THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x)) 54 #define PT_GUARDED_BY(x) \ 55 THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x)) 57 #define ACQUIRED_BEFORE(...) \ 58 THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__)) 60 #define ACQUIRED_AFTER(...) \ 61 THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__)) 63 #define REQUIRES(...) \ 64 THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(__VA_ARGS__)) 66 #define REQUIRES_SHARED(...) \ 67 THREAD_ANNOTATION_ATTRIBUTE__(requires_shared_capability(__VA_ARGS__)) 69 #define ACQUIRE(...) \ 70 THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(__VA_ARGS__)) 72 #define ACQUIRE_SHARED(...) \ 73 THREAD_ANNOTATION_ATTRIBUTE__(acquire_shared_capability(__VA_ARGS__)) 75 #define RELEASE(...) \ 76 THREAD_ANNOTATION_ATTRIBUTE__(release_capability(__VA_ARGS__)) 78 #define RELEASE_SHARED(...) \ 79 THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(__VA_ARGS__)) 81 #define TRY_ACQUIRE(...) \ 82 THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(__VA_ARGS__)) 84 #define TRY_ACQUIRE_SHARED(...) \ 85 THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_shared_capability(__VA_ARGS__)) 87 #define EXCLUDES(...) \ 88 THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__)) 90 #define ASSERT_CAPABILITY(x) \ 91 THREAD_ANNOTATION_ATTRIBUTE__(assert_capability(x)) 93 #define ASSERT_SHARED_CAPABILITY(x) \ 94 THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_capability(x)) 96 #define RETURN_CAPABILITY(x) \ 97 THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x)) 99 #define NO_THREAD_SAFETY_ANALYSIS \ 100 THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis) 105 class CAPABILITY("mutex") Mutex {
109 void lock() ACQUIRE()
114 void unlock() RELEASE()
126 LockGuard(Mutex &mutex_) ACQUIRE(mutex_) : mutex(mutex_)
130 void unlock() RELEASE()
145 #endif // _IDENTT_HTTP_MUTEX_HPP_ Scoped mutex guard class that is annotated for Clang Thread Safety Analysis.
Definition: Mutex.hpp:121
Definition: CryptoBase.hpp:49