mutex.h File Reference
#include "pico/lock_core.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.

Data Structures

struct  __packed_aligned
 recursive mutex instance More...
 
struct  mutex
 regular (non recursive) mutex instance More...
 

Macros

#define auto_init_mutex(name)   static __attribute__((section(".mutex_array"))) mutex_t name
 Helper macro for static definition of mutexesA mutex defined as follows: More...
 
#define auto_init_recursive_mutex(name)   static __attribute__((section(".mutex_array"))) recursive_mutex_t name = { .core = { .spin_lock = (spin_lock_t *)1 /* marker for runtime_init */ }, .owner = 0, .enter_count = 0 }
 Helper macro for static definition of recursive mutexesA recursive mutex defined as follows: More...
 

Typedefs

typedef struct __packed_aligned recursive_mutex_t
 recursive mutex instance
 
typedef struct __packed_aligned mutex mutex_t
 regular (non recursive) mutex instance
 

Functions

void mutex_init (mutex_t *mtx)
 Initialise a mutex structure. More...
 
void recursive_mutex_init (recursive_mutex_t *mtx)
 Initialise a recursive mutex structureA recursive mutex may be entered in a nested fashion by the same owner. More...
 
void mutex_enter_blocking (mutex_t *mtx)
 Take ownership of a mutexThis function will block until the caller can be granted ownership of the mutex. On return the caller owns the mutex. More...
 
void recursive_mutex_enter_blocking (recursive_mutex_t *mtx)
 Take ownership of a recursive mutexThis function will block until the caller can be granted ownership of the mutex. On return the caller owns the mutex. More...
 
bool mutex_try_enter (mutex_t *mtx, uint32_t *owner_out)
 Attempt to take ownership of a mutexIf the mutex wasn't owned, this will claim the mutex for the caller and return true. Otherwise (if the mutex was already owned) this will return false and the caller will NOT own the mutex. More...
 
bool mutex_try_enter_block_until (mutex_t *mtx, absolute_time_t until)
 Attempt to take ownership of a mutex until the specified timeIf the mutex wasn't owned, this method will immediately claim the mutex for the caller and return true. If the mutex is owned by the caller, this method will immediately return false, If the mutex is owned by someone else, this method will try to claim it until the specified time, returning true if it succeeds, or false on timeout. More...
 
bool recursive_mutex_try_enter (recursive_mutex_t *mtx, uint32_t *owner_out)
 Attempt to take ownership of a recursive mutexIf the mutex wasn't owned or was owned by the caller, this will claim the mutex and return true. Otherwise (if the mutex was already owned by another owner) this will return false and the caller will NOT own the mutex. More...
 
bool mutex_enter_timeout_ms (mutex_t *mtx, uint32_t timeout_ms)
 Wait for mutex with timeoutWait for up to the specific time to take ownership of the mutex. If the caller can be granted ownership of the mutex before the timeout expires, then true will be returned and the caller will own the mutex, otherwise false will be returned and the caller will NOT own the mutex. More...
 
bool recursive_mutex_enter_timeout_ms (recursive_mutex_t *mtx, uint32_t timeout_ms)
 Wait for recursive mutex with timeoutWait for up to the specific time to take ownership of the recursive mutex. If the caller already has ownership of the mutex or can be granted ownership of the mutex before the timeout expires, then true will be returned and the caller will own the mutex, otherwise false will be returned and the caller will NOT own the mutex. More...
 
bool mutex_enter_timeout_us (mutex_t *mtx, uint32_t timeout_us)
 Wait for mutex with timeoutWait for up to the specific time to take ownership of the mutex. If the caller can be granted ownership of the mutex before the timeout expires, then true will be returned and the caller will own the mutex, otherwise false will be returned and the caller will NOT own the mutex. More...
 
bool recursive_mutex_enter_timeout_us (recursive_mutex_t *mtx, uint32_t timeout_us)
 Wait for recursive mutex with timeoutWait for up to the specific time to take ownership of the recursive mutex. If the caller already has ownership of the mutex or can be granted ownership of the mutex before the timeout expires, then true will be returned and the caller will own the mutex, otherwise false will be returned and the caller will NOT own the mutex. More...
 
bool mutex_enter_block_until (mutex_t *mtx, absolute_time_t until)
 Wait for mutex until a specific timeWait until the specific time to take ownership of the mutex. If the caller can be granted ownership of the mutex before the timeout expires, then true will be returned and the caller will own the mutex, otherwise false will be returned and the caller will NOT own the mutex. More...
 
bool recursive_mutex_enter_block_until (recursive_mutex_t *mtx, absolute_time_t until)
 Wait for mutex until a specific timeWait until the specific time to take ownership of the mutex. If the caller already has ownership of the mutex or can be granted ownership of the mutex before the timeout expires, then true will be returned and the caller will own the mutex, otherwise false will be returned and the caller will NOT own the mutex. More...
 
void mutex_exit (mutex_t *mtx)
 Release ownership of a mutex. More...
 
void recursive_mutex_exit (recursive_mutex_t *mtx)
 Release ownership of a recursive mutex. More...
 
static bool mutex_is_initialized (mutex_t *mtx)
 Test for mutex initialized state. More...
 
static bool recursive_mutex_is_initialized (recursive_mutex_t *mtx)
 Test for recursive mutex initialized state. More...