avr-fw-modules/core/include/sys/mutex.h

30 lines
562 B
C
Executable File

#pragma once
#include <sys/types.h>
#include <sys/threads.h>
struct mutex
{
uint8_t locked;
THREAD *thread;
};
typedef struct mutex MUTEX;
APICALL mutex_lock(MUTEX *mutex);
uint8_t mutex_try_lock(MUTEX *mutex);
APICALL mutex_lock_timeout(MUTEX *mutex,int32_t timeout);
APICALL mutex_release(MUTEX *mutex);
MUTEX* mutex_lock_indirect(volatile MUTEX *mutex);
void mutex_release_indirect(volatile MUTEX **mutex);
#define MUTEXED(pmutex) \
volatile MUTEX *___mutex __attribute__((__cleanup__(mutex_release_indirect))) = mutex_lock_indirect(pmutex);