---
title: llarp/util/thread/annotations.hpp

---

# llarp/util/thread/annotations.hpp



## Defines

|                | Name           |
| -------------- | -------------- |
|  | **[THREAD_ANNOTATION_ATTRIBUTE__](Files/annotations_8hpp.md#define-thread-annotation-attribute--)**(x)  |
|  | **[CAPABILITY](Files/annotations_8hpp.md#define-capability)**(x)  |
|  | **[SCOPED_CAPABILITY](Files/annotations_8hpp.md#define-scoped-capability)**  |
|  | **[GUARDED_BY](Files/annotations_8hpp.md#define-guarded-by)**(x)  |
|  | **[PT_GUARDED_BY](Files/annotations_8hpp.md#define-pt-guarded-by)**(x)  |
|  | **[ACQUIRED_BEFORE](Files/annotations_8hpp.md#define-acquired-before)**(...)  |
|  | **[ACQUIRED_AFTER](Files/annotations_8hpp.md#define-acquired-after)**(...)  |
|  | **[REQUIRES](Files/annotations_8hpp.md#define-requires)**(...)  |
|  | **[REQUIRES_SHARED](Files/annotations_8hpp.md#define-requires-shared)**(...)  |
|  | **[ACQUIRE](Files/annotations_8hpp.md#define-acquire)**(...)  |
|  | **[ACQUIRE_SHARED](Files/annotations_8hpp.md#define-acquire-shared)**(...)  |
|  | **[RELEASE](Files/annotations_8hpp.md#define-release)**(...)  |
|  | **[RELEASE_SHARED](Files/annotations_8hpp.md#define-release-shared)**(...)  |
|  | **[TRY_ACQUIRE](Files/annotations_8hpp.md#define-try-acquire)**(...)  |
|  | **[TRY_ACQUIRE_SHARED](Files/annotations_8hpp.md#define-try-acquire-shared)**(...)  |
|  | **[EXCLUDES](Files/annotations_8hpp.md#define-excludes)**(...)  |
|  | **[ASSERT_CAPABILITY](Files/annotations_8hpp.md#define-assert-capability)**(x)  |
|  | **[ASSERT_SHARED_CAPABILITY](Files/annotations_8hpp.md#define-assert-shared-capability)**(x)  |
|  | **[RETURN_CAPABILITY](Files/annotations_8hpp.md#define-return-capability)**(x)  |
|  | **[NO_THREAD_SAFETY_ANALYSIS](Files/annotations_8hpp.md#define-no-thread-safety-analysis)**  |




## Macros Documentation

### define THREAD_ANNOTATION_ATTRIBUTE__

```cpp
#define THREAD_ANNOTATION_ATTRIBUTE__(
    x
)

```


### define CAPABILITY

```cpp
#define CAPABILITY(
    x
)
THREAD_ANNOTATION_ATTRIBUTE__(capability(x))
```


### define SCOPED_CAPABILITY

```cpp
#define SCOPED_CAPABILITY THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)
```


### define GUARDED_BY

```cpp
#define GUARDED_BY(
    x
)
THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))
```


### define PT_GUARDED_BY

```cpp
#define PT_GUARDED_BY(
    x
)
THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x))
```


### define ACQUIRED_BEFORE

```cpp
#define ACQUIRED_BEFORE(
    ...
)
THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__))
```


### define ACQUIRED_AFTER

```cpp
#define ACQUIRED_AFTER(
    ...
)
THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__))
```


### define REQUIRES

```cpp
#define REQUIRES(
    ...
)
THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(__VA_ARGS__))
```


### define REQUIRES_SHARED

```cpp
#define REQUIRES_SHARED(
    ...
)
THREAD_ANNOTATION_ATTRIBUTE__(requires_shared_capability(__VA_ARGS__))
```


### define ACQUIRE

```cpp
#define ACQUIRE(
    ...
)
THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(__VA_ARGS__))
```


### define ACQUIRE_SHARED

```cpp
#define ACQUIRE_SHARED(
    ...
)
THREAD_ANNOTATION_ATTRIBUTE__(acquire_shared_capability(__VA_ARGS__))
```


### define RELEASE

```cpp
#define RELEASE(
    ...
)
THREAD_ANNOTATION_ATTRIBUTE__(release_capability(__VA_ARGS__))
```


### define RELEASE_SHARED

```cpp
#define RELEASE_SHARED(
    ...
)
THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(__VA_ARGS__))
```


### define TRY_ACQUIRE

```cpp
#define TRY_ACQUIRE(
    ...
)
THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(__VA_ARGS__))
```


### define TRY_ACQUIRE_SHARED

```cpp
#define TRY_ACQUIRE_SHARED(
    ...
)
  THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_shared_capability(__VA_ARGS__))
```


### define EXCLUDES

```cpp
#define EXCLUDES(
    ...
)
THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))
```


### define ASSERT_CAPABILITY

```cpp
#define ASSERT_CAPABILITY(
    x
)
THREAD_ANNOTATION_ATTRIBUTE__(assert_capability(x))
```


### define ASSERT_SHARED_CAPABILITY

```cpp
#define ASSERT_SHARED_CAPABILITY(
    x
)
THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_capability(x))
```


### define RETURN_CAPABILITY

```cpp
#define RETURN_CAPABILITY(
    x
)
THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))
```


### define NO_THREAD_SAFETY_ANALYSIS

```cpp
#define NO_THREAD_SAFETY_ANALYSIS THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)
```


## Source code

```cpp
#pragma once
#include <ciso646>

// Clang thread safety analysis macros.  Does nothing under non-clang compilers.

// Enable thread safety attributes only with clang and libc++ (the latter
// because we are using stl mutexes, which don't have the required annotations
// under stdlibc++). The attributes can be safely erased when compiling with
// other compilers.
#if defined(__clang__) && defined(_LIBCPP_VERSION) && !defined(SWIG)
#define THREAD_ANNOTATION_ATTRIBUTE__(x) __attribute__((x))
#else
#define THREAD_ANNOTATION_ATTRIBUTE__(x)  // no-op
#endif

#define CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE__(capability(x))

#define SCOPED_CAPABILITY THREAD_ANNOTATION_ATTRIBUTE__(scoped_lockable)

#define GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(guarded_by(x))

#define PT_GUARDED_BY(x) THREAD_ANNOTATION_ATTRIBUTE__(pt_guarded_by(x))

#define ACQUIRED_BEFORE(...) THREAD_ANNOTATION_ATTRIBUTE__(acquired_before(__VA_ARGS__))

#define ACQUIRED_AFTER(...) THREAD_ANNOTATION_ATTRIBUTE__(acquired_after(__VA_ARGS__))

#define REQUIRES(...) THREAD_ANNOTATION_ATTRIBUTE__(requires_capability(__VA_ARGS__))

#define REQUIRES_SHARED(...) THREAD_ANNOTATION_ATTRIBUTE__(requires_shared_capability(__VA_ARGS__))

#define ACQUIRE(...) THREAD_ANNOTATION_ATTRIBUTE__(acquire_capability(__VA_ARGS__))

#define ACQUIRE_SHARED(...) THREAD_ANNOTATION_ATTRIBUTE__(acquire_shared_capability(__VA_ARGS__))

#define RELEASE(...) THREAD_ANNOTATION_ATTRIBUTE__(release_capability(__VA_ARGS__))

#define RELEASE_SHARED(...) THREAD_ANNOTATION_ATTRIBUTE__(release_shared_capability(__VA_ARGS__))

#define TRY_ACQUIRE(...) THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_capability(__VA_ARGS__))

#define TRY_ACQUIRE_SHARED(...) \
  THREAD_ANNOTATION_ATTRIBUTE__(try_acquire_shared_capability(__VA_ARGS__))

#define EXCLUDES(...) THREAD_ANNOTATION_ATTRIBUTE__(locks_excluded(__VA_ARGS__))

#define ASSERT_CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE__(assert_capability(x))

#define ASSERT_SHARED_CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE__(assert_shared_capability(x))

#define RETURN_CAPABILITY(x) THREAD_ANNOTATION_ATTRIBUTE__(lock_returned(x))

#define NO_THREAD_SAFETY_ANALYSIS THREAD_ANNOTATION_ATTRIBUTE__(no_thread_safety_analysis)
```


-------------------------------

Updated on 2023-01-09 at 19:27:44 +0000
