rt/examples/recursive.c

31 lines
441 B
C

#include <rt/mutex.h>
#include <rt/task.h>
#include <rt/trap.h>
static RT_MUTEX_RECURSIVE(mutex);
static unsigned x = 0;
static void bar(void)
{
rt_mutex_lock(&mutex);
x *= 2;
rt_mutex_unlock(&mutex);
}
static void foo(void)
{
rt_mutex_lock(&mutex);
++x;
bar();
rt_mutex_unlock(&mutex);
}
static void locker(void)
{
rt_task_drop_privilege();
foo();
rt_trap();
}
RT_TASK(locker, RT_STACK_MIN, 0);