31 lines
441 B
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);
|