libtransistor
A userland library for the Nintendo Switch
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros
Macros | Functions | Variables
mutex.h File Reference

Mutex functions and thread-safety macros. More...

#include <libtransistor/types.h>
Include dependency graph for mutex.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define THREAD_ANNOTATION_ATTRIBUTE__(x)   __attribute__((x))
 
#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)
 
#define TRN_MUTEX_STATIC_INITIALIZER   {.lock = 0U}
 
#define TRN_RECURSIVE_MUTEX_STATIC_INITIALIZER   {.mutex = TRN_MUTEX_STATIC_INITIALIZER, .owner = 0, .count = 0}
 

Functions

struct CAPABILITY ("mutex")
 
void trn_mutex_create (trn_mutex_t *mutex)
 
void trn_mutex_lock (trn_mutex_t *mutex) ACQUIRE(mutex)
 
void trn_mutex_interrupt_lock (trn_mutex_t *mutex) ACQUIRE(mutex)
 Locks the mutex. If it is currently being held by a thread, that thread will be interrupted via svcCancelSynchronization.
 
bool trn_mutex_try_lock (trn_mutex_t *mutex) TRY_ACQUIRE(true
 
void trn_mutex_unlock (trn_mutex_t *mutex) RELEASE(mutex)
 
void trn_recursive_mutex_create (trn_recursive_mutex_t *recursive)
 
void trn_recursive_mutex_lock (trn_recursive_mutex_t *recursive) ACQUIRE(recursive)
 
void trn_recursive_mutex_interrupt_lock (trn_recursive_mutex_t *recursive) ACQUIRE(recursive)
 Locks the mutex. If it is currently being held by another thread, that thread will be interrupted via svcCancelSynchronization.
 
bool trn_recursive_mutex_try_lock (trn_recursive_mutex_t *recursive) TRY_ACQUIRE(true
 
void trn_recursive_mutex_unlock (trn_recursive_mutex_t *recursive) RELEASE(recursive)
 

Variables

 trn_mutex_t
 
 trn_recursive_mutex_t
 
bool mutex
 
bool recursive
 

Detailed Description

Mutex functions and thread-safety macros.