rt/examples/sem.c

37 lines
661 B
C
Raw Normal View History

#include <rt/assert.h>
#include <rt/sem.h>
#include <rt/task.h>
#include <rt/trap.h>
2022-08-16 01:37:04 -07:00
static const int n = 10;
2022-11-27 16:11:49 -08:00
static RT_SEM(sem, 0);
static void poster(void)
{
rt_task_drop_privilege();
2023-07-30 18:46:01 -07:00
for (int i = 0; i < n; ++i)
{
rt_task_sleep(5);
2022-11-27 16:11:49 -08:00
rt_sem_post(&sem);
}
2022-11-20 13:52:10 -08:00
rt_task_sleep(15);
2022-11-27 16:11:49 -08:00
rt_sem_post(&sem);
}
static void waiter(void)
{
rt_task_drop_privilege();
2023-07-30 18:46:01 -07:00
for (int i = 0; i < n; ++i)
{
rt_assert(rt_sem_timedwait(&sem, 10), "wait timed out");
}
2022-11-20 13:52:10 -08:00
rt_assert(!rt_sem_timedwait(&sem, 10), "wait didn't time out");
2022-11-20 13:52:10 -08:00
rt_trap();
}
RT_TASK(poster, RT_STACK_MIN, 0);
RT_TASK(waiter, RT_STACK_MIN, 0);