30 lines
562 B
C
Executable file
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);
|
|
|
|
|
|
|